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