ANTLR

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
ANTLR
Entwickler Terence Parr
Aktuelle Version 4.2 (3. Februar 2014)[1]
3.5 (4. Januar 2013)[2]
2.7.7 (1. November 2006)[3]
Programmier­sprache Java
Lizenz BSD
www.antlr.org

ANTLR 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.[4]

Beschreibung[Bearbeiten]

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 und Mono lauffähig.

Als Zielsprachen werden u. a. ActionScript, Ada95, C, C++, C#, Java, JavaScript, Objective-C und Python unterstützt.[5] Die von ANTLR ausgegebenen Code-Dateien benötigen Funktionen, die in einer Parser-Bibliothek (z. B. antlr.runtime.dll) zur Verfügung gestellt werden. Dabei können abstrakte Syntaxbäume und entsprechende TreeParser automatisiert erstellt werden.

Beispiel[Bearbeiten]

Im folgenden Beispiel wird ein Parser in ANTLR 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
}
// 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[Bearbeiten]

Literatur[Bearbeiten]

  •  Terence Parr: The Definitive ANTLR Reference Guide: Building Domain-Specific Languages. 1. Auflage. Pragmatic Programmers, 2007, ISBN 0978739256.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. ANTLRv4 Download page
  2. ANTLRv3 Download page
  3. ANTLRv2 Download page
  4.  Terence Parr: The Definitive ANTLR Reference. Building Domain-Specific Languages. The Pragmatic Bookshelf, 7. Mai 2007, ISBN 0-9787392-5-6, Preface, S. 15.
  5. http://www.antlr.org/wiki/display/ANTLR3/Code+Generation+Targets