2013-04-04 6 views
8

Ich habe eine ANTLR3-Grammatik, die einen abstrakten Syntaxbaum erstellt. Ich überarbeite ein Upgrade auf ANTLR4. Es scheint jedoch, dass ANTLR4 nur Syntaxbäume und keine abstrakten Syntaxbäume erstellt. Zum Beispiel wird die output=AST Option nicht mehr erkannt. Darüber hinaus erscheint weder "AST" noch "abstrakte Syntax" erscheint in dem Text "The Definitive ANTLR4 Referenz".Wie kann ich einen AST mit ANTLR4 erstellen?

Ich frage mich, ob ich etwas vermisse.

Meine Anwendung kann derzeit über den von ANTLR3 erzeugten AST crawlen. Es ist nicht unmöglich, es zu ändern, um einen Parse-Baum zu verarbeiten, aber es wird ein bisschen Arbeit sein. Ich möchte sicher sein, dass es notwendig ist, bevor ich die Straße hinuntergehe.

+0

Diese Frage wurde schließlich beantwortet unter http://stackoverflow.com/questions/29971097/how-to-create-ast-with-antlr4 – James

Antwort

7

ANTLR 4 erzeugt Syntaxbäume basierend auf der Grammatik anstelle von ASTs basierend auf beliebigen AST-Operatoren und/oder Umschreibungsregeln. Dadurch kann ANTLR 4 automatisch Listener- und Besucherschnittstellen erstellen, die Sie mithilfe Ihrer Grammatik im Code implementieren können.

Die Änderung kann für Benutzer, die vorhandene Anwendungen von Version 3 aktualisieren, dramatisch sein, aber als Ganzes ist das neue System viel einfacher zu verwenden und (insbesondere) zu warten.

+0

Danke. Ich kann die Vorteile des neuen Systems verstehen, weshalb ich auf dieses System upgraden möchte. Ich bin bereit zu tun, was notwendig ist, um das zu ermöglichen. Ich wollte nur sicher sein, dass ich die Situation verstanden habe, bevor ich mich auf diese Bemühungen eingelassen habe. Es klingt wie ich es tue. –

+0

Kann ich 'ParserRuleContext' als AST-Knoten verwenden? – jiamo