Gelesen: The Definitive ANTLR Reference

Building Domain-Specific Languages
Während dem Studium habe ich das Modul über Compilerbau nicht gewählt, meine Gründe von damals weiss ich aber heute auch nicht mehr so genau (ich glaube ich hatte so einen freien Tag). Durch die Arbeit am JRuby-Parser während der ersten Studienarbeit wurde mein Interesse aber geweckt, und als ich hörte, dass es von den Pragmatic Programmern ein Buch über ANTLR gibt, konnte ich mir das Lesen nicht verkneiffen.
Also, ANTLR (ANother Tool for Language Recognition) ist ein Parsergenerator für LL(k)-Grammatiken, wobei das k beliebig gross sein kann. Der Autor spricht deshalb auch von LL(*). Mit ANTLR lassen sich Lexer, Parser sowie ASTs in einer jeweils ziemlich ähnlichen Syntax schreiben und daraus dann Java, C++, Python, etc. Code generieren. Actions lassen sich jeweils in der Zielsprache direkt in der Grammatik definieren, man hat aber auch die Möglichkeit mit Templates zu arbeiten und so das ganze etwas leserlicher zu gestalten. Nun, wer sich das Buch jetzt noch immer nicht kaufen möchte, kann sich ja mal dieses Tutorial ansehen.
Wie der Titel des Buches schon sagt, ist es eine “Reference”, dementsprechend vielleicht auch nicht unbedingt zum von vorne nach hinten durchlesen geeignet, sondern um damit zu arbeiten, also auch als Nachschlagewerk. Der grösste Teil des Buches besteht aus der ANTLR Reference, in dem alle Möglichen Optionen beschrieben werden. Ab und zu gibt es deshalb auch Teile, die sich mit der Einführung überschneiden, was aber nicht allzu fest störte.
Wirklich super sind die vielen Beispiele für alle Möglichen Probleme (Java-Code, C++ Zweideutigkeiten) und es wird sogar ein simpler Java bytecode Generator erstellt. Die ganze Thematik ist halt ziemlich komplex und man muss sich beim Lesen echt anstrengen, gute Beispiele helfen da sehr.
Was mir leider wirklich gefehlt hat war das Testen. Die Beispiele wurden normalerweise einfach mit etwas Kommandozeileninput “getestet”, wenn ich mir jedoch vorstelle, eine eigene Grammatik zu schreiben, kann ich mir kaum vorstellen, das ohne Unit-Tests zu tun. Natürlich könnte man einfach Tests in der Zielsprache, also beispielsweise mit JUnit, schreiben, aber für besonders elegant halte ich das nicht gerade. Aber natürlich gibt es ein Unit-Testing Framework für ANTLR, nämlich gUnit, im Buch wird das aber leider nicht erwähnt. Ein kleiner Makel an einem ansonsten guten Buch.
Ich weiss noch nicht, ob ich ANTLR in der nahen Zukunft mal einsetzen kann, aber reizen würde es mich schon, und mit dem Buch sollte das auch kein Problem darstellen.
1 comment on “Gelesen: The Definitive ANTLR Reference”
Leave a comment
You must be connected to write a comment.


ich kenne ein paar, die das modul über compilerbau gleich nach der ersten übung wieder abgemeldet haben
ist halt eine komplexe welt, die eines compilers. grammatiken, parser, reader, automaten etc., da kommt man schnell ins stocken