ANTLR
ANTLR | |
---|---|
Basisdaten | |
Entwickler | Terence Parr |
Aktuelle Version | 4.13.2[1] (3. August 2024) |
Programmiersprache | Java |
Lizenz | BSD |
www.antlr.org |
ANTLR (sprich Antler) ist ein objektorientierterParsergenerator, der seit 1989 vonTerence Parr an derUniversität von San Francisco entwickelt wird. Die Abkürzung ANTLR steht fürANotherTool forLanguageRecognition.[2]
Beschreibung
[Bearbeiten |Quelltext bearbeiten]ANTLR unterstützt die Erzeugung vonParsern,Lexern und TreeParsern fürLL(k)-Grammatiken mit beliebigen k. Die verwendete Eingabe-Sprache ist eine Mischung ausformaler Grammatik und Elementen aus objektorientierten Sprachen (Beispiel siehe unten).
Der Übersetzer selbst ist eineJava-Applikation, alsfreie Software verfügbar und auf derJava-Plattform lauffähig. Eine ältere Version von ANTLR (3.1.x) wurde auch nach C# portiert und ist somit unter.Net-Framework undMono lauffähig.
ANTLR3 unterstützt als Zielsprachen u. a.ActionScript,Ada95,C,C++,C#,Java,JavaScript,Objective-C undPython.[3][4] Mit dem Erscheinen von ANTLR4 mussten alle Laufzeitbibliotheken neu geschrieben werden, da die gesamte Parselogik in dieLaufzeitumgebung verlagert wurde. Es gibt nun Laufzeitpakete fürJava,C#,Python 2/3, JavaScript,Go, C++,Swift undPHP.[5] Weitere Sprachen, wieKotlin undRust sind in Planung/Arbeit.
Die Laufzeitumgebung stellt hierbei sämtliche Klassen und Funktionen bereit, die zurKompilierung der generierten Parser und Lexer Dateien benötigt werden. Mit ANTLR3 können während des Parseprozessesabstrakte Syntaxbäume automatisch erstellt werden (zusammen mit einem entsprechende TreeParser). Dies änderte sich mit ANTLR4, wo nun statt dem AST einParse 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]
Beispiel
[Bearbeiten |Quelltext bearbeiten]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 Zielspracheoptions{language="CSharp";}// es folgt der ParserclassSumParserextendsParser;options{k=1;''// Parser-[[Lookahead]]: 1 [[Token (Compilerbau)|Token]]''}// Definition eines Ausdrucksstatement:INTEGER(PLUS^INTEGER)*;// hier der LexerclassSumLexerextendsLexer;options{k=1;''// Lexer-[[Lookahead]]: 1 Zeichen''}PLUS:'+';DIGIT:('0'..'9');INTEGER:(DIGIT)+;
Das folgende Listing demonstriert den Aufruf des Parsers in einem Programm:
TextReaderreader;// (...) Textreader mit Zeichen füllenSumLexerlexer=newSumLexer(reader);SumParserparser=newSumParser(lexer);parser.expression();
Siehe auch
[Bearbeiten |Quelltext bearbeiten]Literatur
[Bearbeiten |Quelltext bearbeiten]- 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).
Weblinks
[Bearbeiten |Quelltext bearbeiten]- www.antlr.org
- 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
Einzelnachweise
[Bearbeiten |Quelltext bearbeiten]- ↑Release 4.13.2. 3. August 2024 (abgerufen am 20. August 2024).
- ↑Terence Parr:The Definitive ANTLR Reference. Building Domain-Specific Languages. The Pragmatic Bookshelf, 2007,ISBN 0-9787392-5-6, Preface,S. 15 (amerikanisches Englisch).
- ↑ANTLR v3 documentation - Code Generation Targets
- ↑Download ANTLR. Abgerufen am 30. Januar 2020.
- ↑abantlr/antlr4. Abgerufen am 30. Januar 2020 (englisch).