de fr en en de de en de fr de de en de ro en de de de de de de de de de de de de de de de de de de de de de de de de en de de de de de de en de de es de de de de de de en pl en en de nl en ru da it fi es es en de tr de de de de de de de en es nb en
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.[2]
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.
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.[5]
Im folgenden Beispiel wird ein Parser in ANTLR3 beschrieben, der Summenausdrücke in der Form "1+2+3" erkennen kann:
// allgemeine Optionen, zum Beispiel die Zielsprache options { language = "CSharp"; } // es folgt der Parser class SumParser extends Parser; options { k = 1; ''// Parser-[[Lookahead]]: 1 [[Token (Compilerbau)|Token]]'' } // Definition eines Ausdrucks statement : INTEGER (PLUS^ INTEGER)*; // hier der Lexer class SumLexer extends Lexer; options { k = 1; ''// Lexer-[[Lookahead]]: 1 Zeichen'' } PLUS : '+'; DIGIT : ('0'..'9'); INTEGER : (DIGIT)+;
Das folgende Listing demonstriert den Aufruf des Parsers in einem Programm:
TextReader reader; // (...) Textreader mit Zeichen füllen SumLexer lexer = new SumLexer(reader); SumParser parser = new SumParser(lexer); parser.expression();
Terence Parr: The Definitive ANTLR Reference Guide: Building Domain-Specific Languages. 1. Auflage. The Pragmatic Programmers, 2007, ISBN 978-0-9787392-5-6 (englisch).
Terence Parr: The Definitive ANTLR 4 Reference. The Pragmatic Programmers, 2013, ISBN 978-1-934356-99-9 (englisch).
supportweb.cs.bham.ac.uk – kurzes Tutorial in ANTLRv2 (Java als Zielsprache)
antlreclipse.sourceforge.net – Eclipse Plugin für ANTLR (freie Software)
placidsystems.com – ANTLR und Eclipse
↑ Release 4.9.2. 11. März 2021 (abgerufen am 9. April 2021).
↑ Terence Parr: The Definitive ANTLR Reference. Building Domain-Specific Languages. The Pragmatic Bookshelf, 2007, ISBN 0-9787392-5-6, Preface, S. 15 (amerikanisches Englisch).