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