2009-09-10 13 views
3

J'ai développé un langage de programmation interprété. Il est fortement basé sur C. Le problème est, je veux ajouter une directive foreach et n'ai aucune idée de comment. J'utilise Bison et Flex comme générateur d'analyseur et lexeur.Création d'un mot-clé foreach avec yacc ou Bison et Flex

+1

Votre langue devra prendre en charge la possibilité d'obtenir une taille de conteneur en connaissant simplement le nom du conteneur. En C, les tableaux ne portent pas leur taille avec eux. Donc, votre langage doit s'assurer qu'il le soutient d'abord. – GManNickG

+0

Ressources générales du compilateur (et de l'interpréteur): http://stackoverflow.com/questions/1669/learning-to-write-a-compiler – dmckee

Répondre

4

Dans votre grammaire, vous voulez une expression qui est quelque chose comme ce qui suit:

foreach := foreach (name in name) { statements } 

Lorsque vous analysez cela, vous devriez être en mesure de traduire directement dans une boucle while dans votre AST avec déclaration supplémentaire qui affecte une variable au début.

Cela me semble la manière la plus simple de le faire, mais aura probablement des limitations avec plusieurs types de données itérables (par exemple une liste par rapport à un tableau). Dans ce cas, vous pouvez envisager de consolider toutes les itérations afin qu'elles aient une méthode cohérente pour obtenir l'élément suivant.