Notizen

Werbung
Automaten und formale Sprachen
Notizen zu den Folien
15
Erzeugen eines Parsers mit ANTLR
EBNF-Form (Folien 349–350)
In der Praxis wird einen anderen Syntax verwendet (Nichtterminale werden in Spitzenklammern
eingeschlossen, Terminale in Anführungszeichen und statt →“ wird ::=“ oder =“ geschrieben);
”
”
”
wir benutzen heute aber den Syntax, den wir im Rest der Vorlesung schon benutzt haben.
ANTLR anrufen
Wir wenden ANTLR auf die Beispiel-Grammatik Expression.g an:
$ antlr4 -visitor Expression.g
ANTLR erzeugt jetzt die folgenden Dateien:
• ExpressionLexer.java – Java-Klasse, die den Lexical Analyser des Expression-Parsers implementiert
• ExpressionParser.java – Java-Klasse, die den Expression-Parser implementiert
• ExpressionLexer.tokens und ExpressionParser.tokens – Token-Liste für den Lexical
Analyser und für den Parser
• ExpressionListener.java und ExpressionBaseListener.java – Interface für das Tree
”
Walker“-Idiom zur Weiterverarbeitung des Syntaxbaums und Standard-Implementierung davon (wurde in der Vorlesung nicht benutzt)
• ExpressionVisitor.java und ExpressionBaseVisitor.java – Interface für das Visitor“”
Idiom zur Weiterverarbeitung des Syntaxbaums und Standard-Implementierung davon (diese
Variante wurde in der Vorlesung benutzt)
Wir kompilieren alle Java-Klassen:
$ javac *.java
Jetzt können wir mit dem Grun-Werkzeug den Parser ausprobieren und einen Syntaxbaum anzeigen lassen. Wir wollen die Grammatik Expression benutzen, die Startvariable ist program, und
als Eingabe nehmen wie die Beispieleingabe prog.
$ grun Expression program -gui prog
Die Option -gui sorgt dafür, dass wir den Syntaxbaum in einer graphischen Benutzeroberfläche
angezeigt bekommen.
Die Java-Klasse Evaluator implentiert eine einfache Programmiersprache“ die arithmetische
”
Ausdrücke auswerten kann und Zwischenergebnisse in Variablen speichern kann.
$ java Evaluator prog
42.0
1
Herunterladen