ANTLR
# ANTLR

ANTLR (sprich Antler) ist ein objektorientierter Parsergenerator, der seit 1989 von Terence Parr an der Universität von San Francisco entwickelt wird. Die Abkürzung ANTLR steht für ANother Tool for Language Recognition.

## Beschreibung

ANTLR unterstützt die Erzeugung von Parsern, Lexern und TreeParsern für LL(k)-Grammatiken mit beliebigen k. Die verwendete Eingabe-Sprache ist eine Mischung aus formaler Grammatik und Elementen aus objektorientierten Sprachen (Beispiel siehe unten).

Der Übersetzer selbst ist eine Java-Applikation, als freie Software verfügbar und auf der Java-Plattform lauffähig. Eine ältere Version von ANTLR (3.1.x) wurde auch nach C# portiert und ist somit unter .Net-Framework und Mono lauffähig.

ANTLR3 unterstützt als Zielsprachen u. a. ActionScript, Ada95, C, C++, C#, Java, JavaScript, Objective-C und Python. Mit dem Erscheinen von ANTLR4 mussten alle Laufzeitbibliotheken neu geschrieben werden, da die gesamte Parselogik in die Laufzeitumgebung verlagert wurde. Es gibt nun Laufzeitpakete für Java, C#, Python 2/3, JavaScript, Go, C++, Swift und PHP. Weitere Sprachen, wie Kotlin und Rust sind in Planung/Arbeit.

Die Laufzeitumgebung stellt hierbei sämtliche Klassen und Funktionen bereit, die zur Kompilierung der generierten Parser und Lexer Dateien benötigt werden. Mit ANTLR3 können während des Parseprozesses abstrakte Syntaxbäume automatisch erstellt werden (zusammen mit einem entsprechende TreeParser). Dies änderte sich mit ANTLR4, wo nun statt dem AST ein Parse Tree (Syntax Tree) generiert wird. Statt eines Tree Parsers werden nun Listener + Visitor Klassen produziert, die es erlauben den Parse Tree auf vielfältige Weise zu durchlaufen.

## Beispiel

Im folgenden Beispiel wird ein Parser in ANTLR3 beschrieben, der Summenausdrücke in der Form "1+2+3" erkennen kann:

Das folgende Listing demonstriert den Aufruf des Parsers in einem Programm:

