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
3
A
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.
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
Ressources générales du compilateur (et de l'interpréteur): http://stackoverflow.com/questions/1669/learning-to-write-a-compiler – dmckee