Najbardziej znaczącą różnicą między YACC / Bison i ANTLR jest rodzaj gramatyki, którą te narzędzia mogą przetwarzać. YACC / Bison obsługuje gramatyki LALR, ANTLR obsługuje gramatyki LL.
Często osoby, które przez długi czas pracowały z gramatykami LALR, będą miały trudność z gramatyką LL i odwrotnie. Nie oznacza to, że gramatyka lub narzędzia są z natury trudniejsze w obsłudze. To, które narzędzie uważasz za łatwiejsze w użyciu, sprowadza się głównie do znajomości rodzaju gramatyki.
Jeśli chodzi o zalety, są aspekty, w których gramatyki LALR mają przewagę nad gramatykami LL i są inne aspekty, w których gramatyki LL mają przewagę nad gramatykami LALR.
YACC / Bison generuje parsery sterowane tabelami, co oznacza, że „logika przetwarzania” jest zawarta w danych programu parsera, a nie w kodzie parsera. Opłaca się to, że nawet parser dla bardzo złożonego języka ma stosunkowo niewielki ślad w kodzie. Było to ważniejsze w latach sześćdziesiątych i siedemdziesiątych, kiedy sprzęt był bardzo ograniczony. Generatory parserów sterowane tabelami sięgają do tej epoki, a mały ślad kodu był wówczas głównym wymaganiem.
ANTLR generuje rekurencyjne parsery zejścia, co oznacza, że "logika przetwarzania" jest zawarta w kodzie parsera, ponieważ każda reguła produkcji gramatyki jest reprezentowana przez funkcję w kodzie parsera. Opłaca się to, że łatwiej jest zrozumieć, co robi parser, czytając jego kod. Ponadto parsery zstępujące rekurencyjnie są zwykle szybsze niż parsery sterowane tabelami. Jednak w przypadku bardzo złożonych języków ślad kodu będzie większy. To był problem w latach sześćdziesiątych i siedemdziesiątych XX wieku. Wtedy tylko stosunkowo małe języki, jak na przykład Pascal, były implementowane w ten sposób z powodu ograniczeń sprzętowych.
Parsery generowane przez ANTLR zwykle znajdują się w pobliżu 10.000 linii kodu i więcej. Odręczne rekursywne parsery zejścia często znajdują się w tym samym polu. Kompilator Oberon firmy Wirth jest prawdopodobnie najbardziej kompaktowy i zawiera około 4000 linii kodu, w tym generowanie kodu, ale Oberon to bardzo kompaktowy język z zaledwie około 40 regułami produkcyjnymi.
Jak ktoś już zauważył, dużym plusem dla ANTLR jest graficzne narzędzie IDE o nazwie ANTLRworks. Jest to kompletne laboratorium gramatyczne i projektowania języka. Wizualizuje reguły gramatyczne podczas ich wpisywania, a jeśli znajdzie jakiekolwiek konflikty, pokaże graficznie, czym jest konflikt i co go powoduje. Może nawet automatycznie refaktoryzować i rozwiązywać konflikty, takie jak lewostronna rekurencja. Kiedy już masz gramatykę wolną od konfliktów, możesz pozwolić ANTLRworks przeanalizować plik wejściowy twojego języka i zbudować dla ciebie drzewo parsowania i AST oraz pokazać je graficznie w IDE. Jest to bardzo duża zaleta, ponieważ pozwala zaoszczędzić wiele godzin pracy: zanim zaczniesz kodować, znajdziesz błędy koncepcyjne w projekcie swojego języka! Nie znalazłem takiego narzędzia do gramatyki LALR, wygląda na to, że nie ma takiego narzędzia.
Nawet dla osób, które nie chcą generować swoich parserów, ale ręcznie je kodują, ANTLRworks jest doskonałym narzędziem do projektowania / prototypowania języka. Całkiem możliwe, że najlepsze dostępne takie narzędzie. Niestety, to nie pomaga, jeśli chcesz zbudować parsery LALR. Przejście z LALR na LL po prostu w celu skorzystania z ANTLRworks może być opłacalne, ale dla niektórych osób zmiana gramatyki może być bardzo bolesnym doświadczeniem. Innymi słowy: YMMV.