Zum Inhalt springen

ANTLR

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 27. November 2007 um 09:45 Uhr durch Sebastian.Dietrich (Diskussion | Beiträge) (typo). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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.

Beschreibung

ANTLR unterstützt die Erzeugung von Parsern, Lexern und TreeParsern für LL(k)-Grammatiken mit beliebigen k. Der Übersetzer selbst ist in Java geschrieben, als Open Source verfügbar und ist auf der Java-Plattform sowie auf .NET und Mono lauffähig.

Als Zielsprachen werden C, C++, C#, Java, Objective-C und Python unterstützt. 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.

Die von ANTLR benutzte Sprache ist eine Mischung aus formaler Grammatik und Elementen aus objektorientierten Sprachen.

Beispiel

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;
}
// Definition eines Ausdrucks
statement : INTEGER (PLUS^ INTEGER)*;
// hier der Lexer
class SumLexer extends Lexer;
options
{
  k = 1;
}
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();

Literatur

  • Terence Parr: The Complete ANTLR Reference Guide: Building Domain-specific Languages. 1. Auflage. Pragmatic Programmers, 2007.