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 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]
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.[3][4] 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.[5] 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 des 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]
Beispiel
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();
Siehe auch
Literatur
- 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-93435699-9 (englisch).
Weblinks
- 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
- ↑ 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.
- ↑ a b antlr/antlr4. Abgerufen am 30. Januar 2020 (englisch).
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.