Question

J'ai un AST généré par ANTLR, et je dois le convertir en un DLR compatible (arbres d'expression). Cependant, il semblerait que je ne peux pas utiliser modèle d'arbre matchers pour ce que les arbres d'expression ont besoin de leurs sous-arbres à l'instanciation (que je ne peux pas obtenir). Quelle solution serait le mieux pour moi d'utiliser?

Était-ce utile?

La solution

Je l'ai fait quelque chose de très similaire il y a quelques années -. Je n'ai pas construit une structure de DLR, mais j'ai construit ma propre structure d'arbre d'expression, qui avait besoin aussi les arguments au moment de la construction (pour atteindre immuabilité)

À l'époque, je travaillais avec ANTLR v2 - et je dois admettre que je ne suis pas familier avec la nouvelle syntaxe v3, plus je ne me rappelle pas tous les détails sur la façon dont je l'ai fait à l'époque - donc au lieu de vous offrir avec un exemple complètement élaboré, je vais essayer de vous raconter mon histoire (pas sûr, si elle applique à votre problème, aussi!):

Tout d'abord, il n'a pas été nécessaire de construire ma structure de l'AST. Je ne le constructeur AST ANLTR comme véhicule: Toutes les règles de construction d'AST peut renvoyer un objet en plus du nœud AST lui-même. La valeur de retour peut alors être utilisé dans la règle extérieure comme argument pour le constructeur, et ainsi de suite. Ainsi, cette structure est construite automatiquement en bas pour vous!

OIEau, vous construisez la structure finale en même temps que l'AST est construit (l'AST n'est construit pour assurer que les règles de syntaxe, et peut être jeté.) Cette approche est très solide, et il est encore plus rapide que la première la construction de l'AST, puis transformer ça! Mais il utilise encore la puissance de l'analyseur AST (par opposition à utiliser simplement le Parser normal / Lexer seul). Et si vous avez besoin AST aussi -. Simplement l'enregistrer quelque part

Si toutefois vous voulez marcher un AST fini - Je suppose que vous pouvez utiliser toute routine de programmation pour le faire - Assurez-vous que cela fonctionne en bas jusqu'à construire votre résultat

Hope this helps en quelque sorte!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top