Der wichtigste Unterschied zwischen YACC / Bison und ANTLR ist die Art der Grammatiken, die diese Tools verarbeiten können. YACC / Bison behandeln LALR-Grammatiken, ANTLR behandelt LL-Grammatiken.
Menschen, die lange Zeit mit LALR-Grammatiken gearbeitet haben, werden es oft schwieriger finden, mit LL-Grammatiken zu arbeiten und umgekehrt. Das bedeutet nicht, dass die Grammatiken oder Werkzeuge von Natur aus schwieriger zu bearbeiten sind. Welches Tool für Sie einfacher zu verwenden ist, hängt hauptsächlich von der Art der Grammatik ab.
In Bezug auf die Vorteile gibt es Aspekte, bei denen LALR-Grammatiken Vorteile gegenüber LL-Grammatiken haben, und es gibt andere Aspekte, bei denen LL-Grammatiken Vorteile gegenüber LALR-Grammatiken haben.
YACC / Bison generieren tabellengesteuerte Parser, was bedeutet, dass die "Verarbeitungslogik" in den Daten des Parserprogramms enthalten ist, nicht so sehr im Code des Parsers. Die Auszahlung ist, dass selbst ein Parser für eine sehr komplexe Sprache einen relativ kleinen Code-Footprint hat. Dies war in den 1960er und 1970er Jahren wichtiger, als die Hardware sehr begrenzt war. Tabellengesteuerte Parser-Generatoren gehen auf diese Zeit zurück und ein geringer Code-Footprint war damals eine Hauptanforderung.
ANTLR generiert rekursive Abstiegsparser, was bedeutet, dass die "Verarbeitungslogik" im Parsercode enthalten ist, da jede Produktionsregel der Grammatik durch eine Funktion im Parsercode dargestellt wird. Die Auszahlung ist, dass es einfacher ist zu verstehen, was der Parser tut, indem er seinen Code liest. Rekursive Abstiegsparser sind normalerweise schneller als tabellengesteuerte. Bei sehr komplexen Sprachen ist der Code-Footprint jedoch größer. Dies war in den 1960er und 1970er Jahren ein Problem. Damals wurden aufgrund von Hardwareeinschränkungen nur relativ kleine Sprachen wie beispielsweise Pascal auf diese Weise implementiert.
Von ANTLR generierte Parser befinden sich normalerweise in der Nähe von 10.000 Codezeilen und mehr. Handgeschriebene Parser rekursiver Abstammung befinden sich häufig im selben Stadion. Wirths Oberon-Compiler ist mit etwa 4000 Codezeilen einschließlich Codegenerierung vielleicht der kompakteste, aber Oberon ist eine sehr kompakte Sprache mit nur etwa 40 Produktionsregeln.
Wie bereits erwähnt, ist das grafische IDE-Tool ANTLRworks ein großes Plus für ANTLR. Es ist ein komplettes Labor für Grammatik- und Sprachdesign. Es visualisiert Ihre Grammatikregeln, während Sie sie eingeben, und wenn es Konflikte findet, zeigt es Ihnen grafisch, was der Konflikt ist und was ihn verursacht. Es kann sogar Konflikte wie Linksrekursion automatisch umgestalten und lösen. Sobald Sie eine konfliktfreie Grammatik haben, können Sie ANTLRworks eine Eingabedatei Ihrer Sprache analysieren lassen, einen Analysebaum und AST für Sie erstellen und den Baum grafisch in der IDE anzeigen. Dies ist ein sehr großer Vorteil, da Sie dadurch viele Stunden Arbeit sparen können: Sie werden konzeptionelle Fehler in Ihrem Sprachdesign finden, bevor Sie mit dem Codieren beginnen! Ich habe kein solches Tool für LALR-Grammatiken gefunden, anscheinend gibt es kein solches Tool.
Selbst für Leute, die ihre Parser nicht generieren, sondern von Hand codieren möchten, ist ANTLRworks ein großartiges Werkzeug für das Design / Prototyping von Sprachen. Möglicherweise das beste verfügbare Tool. Leider hilft Ihnen das nicht, wenn Sie LALR-Parser erstellen möchten. Der Wechsel von LALR zu LL, um ANTLRworks zu nutzen, mag sich lohnen, aber für manche Menschen kann der Wechsel von Grammatiktypen eine sehr schmerzhafte Erfahrung sein. Mit anderen Worten: YMMV.