Download Dokument_1

Transcript
C.2 Parsergeneratoren
Literatur. Auf der ANTLR Homepage (siehe [13]) steht eine umfangreiche Dokumentation, bestehend aus einer langen FAQ, Tutorials, einem Benutzerhandbuch, einer API-Beschreibung
des Frameworks und zusätzlichen Veröffentlichungen von, teils wissenschaftlichen, Arbeiten
zum Thema Compilerbau zur Verfügung. Fragen, die darüber hinausgehen, können in Foren
sowie in einer Mailingliste gestellt werden.
Verwendung. Bei allen im Framework enthaltenen Tools handelt es sich um Kommandozeilenprogramme. Zusätzlich existiert eine graphische Oberfläche für die Benutzung der
Kommandozeilenwerkzeuge unter Eclipse, ANTLR Studio genannt. Allerdings stammt es von
einem Dritten und ist kostenpflichtig. Deshalb gehen wir im Weiteren nur auf die Kommandozeilenverwendung ein.
Zur Erzeugung der Lexer und Parser muss ANTLR, mit einer Grammatik als Parameter, aufgerufen werden. Die so erzeugten Lexer und Parser müssen dann zur Verwendung in einem
separaten Programm eingebaut werden. Dabei benötigen diese weiterhin ANTLR zur Laufzeit.
Eigene Erfahrungen. ANTLR wird (in der Javaversion) wahlweise in einem vorkompilierten JAR-Paket oder als Quelltextversion geliefert. Die Installation durch ein Setup-Programm
verlief fehlerfrei und wir konnten direkt mit der Erzeugung der Parser beginnen. Rund um dieses Projekt existiert offensichtlich eine vergleichsweise große und aktive Community. Dieser
entstammen auch die drei Grammatiken für Java 1.5, welche wir im weiteren gestestet haben.
Die Erzeugung und Kompilierung des jeweiligen Lexers und Parsers aus den beiden Javagrammatiken von Michael Stahl und Michael Studman verlief fehlerfrei, so dass wir mit einem, auf
der Homepage verfügbaren, Beispielprogramm die Parsingtests durchführen konnten.
Die dritte verfügbare Grammatik von Scott Wisniewski baut auf der von Studman auf. Sie soll
die volle Spanne der Java-Identifier erkennen und mit Unicode-Escapesequenzen umgehen
können. Für die Unicode-Unterstützung wird ein in C# (für .NET 2.0) geschriebener Präprozessor mitgeliefert. Um diesen benutzen zu können, mussten wir zunächst einmal ein kleines Kommandozeilenprogramm schreiben, welches die Präprozessor-Klasse benutzt und die
Eingabedateien verarbeitet. Der Lexer und der Parser ließen sich zwar erzeugen, jedoch ließ
sich ersterer nicht kompilieren, da an zwei Stellen im Javaquelltext „Char.IsLetter(...)“ bzw.
„Char.IsLetterOrNumerical(...)“ erzeugt wurden. Nach manuellem Ersetzen durch „Character.isLetter(...)“ bzw. „Character.isLetterOrNumerical(...)“ (siehe API-Beschreibung von Java
5) war eine Kompilierung möglich. Allerdings konnten wir den Parser nicht testen, da dieser
an den von uns korrigierten Stellen abbrach.
99