Ich habe einen XSLT-Parser mit Flex und Bison geschrieben. In letzter Zeit mache ich allerdings ein Projekt mit ANTLR:
Ist die Syntax der JFig-Sprache effizient und klar (und besser als die XML-DSL von Spring-Framework)?
Die Arbeit mit ANTLR hat mir viel besser gefallen als die mit Flex und Bison. ANTLR bietet in mancher Hinsicht eine höhere Abstraktionsebene. Die lexikalischen Definitionen und die Parsergrammatik können alle in einer Datei gespeichert werden. (ANTLR generiert die Token-Datei.)
Einer der wichtigsten Punkte ist die Möglichkeit, Baumgrammatiken zu definieren. Im Grunde genommen parsen Sie die Eingabesprache mit einer Grammatik und haben Aktionen, die in einen optimalen AST-Baum umgeschrieben werden (die als verknüpfte Datenstrukturen im Speicher verbleiben). Dieser Baum kann dann an einen anderen Parser weitergegeben werden, der in einer separaten Baumparserdatei definiert ist. Der Baumparser ist der Ort, an dem Sie die eigentliche Arbeit der gewünschten Aktionen durchführen.
Dies ist ein guter Ansatz, da man die AST-Form beibehalten und sie bei Bedarf immer wieder neu verarbeiten kann - indem man bestimmte Teilbaumknoten herausschält, um sie auf der Grundlage der letzten Aktionen zu verarbeiten usw. Stellen Sie sich so etwas wie einen Sprachinterpreter vor. Anstatt in eine for-Schleife zu gehen und die Sprache immer wieder von Grund auf zu verarbeiten, kann man einfach die AST-Darstellung durcharbeiten.
In meinem Fall habe ich eine Bean Factory für IoC Dependency Injection entwickelt. Meine Bean-Factory behält den AST eines Bean-Deskriptors zur Laufzeit bei. Wenn sie eine neue Bean-Instanz erstellen (oder abrufen) muss, übergebe ich einfach den AST-Teilbaum des Bean-Deskriptors an meinen Baumparser - das Ergebnis ist die gewünschte Bean-Instanz (es gibt viele Faktoren, die bestimmen, wie die angeforderte Bean instanziiert wird, einschließlich der Erstellung anderer Beans, auf die verwiesen wird, und/oder der Anwendung anderer spezieller Verhaltensweisen über Meta-Attribute).
Schließlich zielt meine aktuelle Bean Factory auf Java ab, aber ich möchte ActionScript3 und C# .NET ansprechen. ANTLR bietet dafür Unterstützung.
Wie bereits erwähnt, hat Terrence Parr ein Buch über die Verwendung von ANTLR geschrieben. Es richtet sich an berufstätige Programmierer, die etwas Praktisches mit ANTLR machen müssen (im Gegensatz zu einer akademischen Behandlung des Themas).