Найбільш істотна відмінність YACC / Bison від ANTLR - це тип граматик, які ці інструменти можуть обробляти. YACC / Bison ручка граматики LALR, ANTLR - граматики LL.
Часто людям, які довгий час працювали з граматиками LALR, буде здаватися, що працювати з граматиками LL буде складніше і навпаки. Це не означає, що граматики чи інструменти по суті важче працювати. Який інструмент вам легше використовувати, здебільшого зводиться до ознайомлення з типом граматики.
Що стосується переваг, то є аспекти, коли граматики LALR мають переваги перед граматиками LL та є інші аспекти, коли граматики LL мають переваги перед граматиками LALR.
YACC / Bison генерує парсери, керовані таблицею, а це означає, що "логіка обробки" міститься в даних програми аналізатора, а не стільки в коді аналізатора. Відплата полягає в тому, що навіть аналізатор дуже складної мови має відносно невеликий слід коду. Це було важливіше у 1960-70-ті роки, коли обладнання було дуже обмеженим. Генератори парсерів, керовані таблицями, повертаються до цієї епохи, і тоді головна вимога була невеликим слідом коду.
ANTLR генерує рекурсивні парсери зниження, що означає, що "логіка обробки" міститься в коді аналізатора, оскільки кожне правило виробництва граматики представлене функцією в коді аналізатора. Окупність полягає в тому, що легше зрозуміти, що робить аналізатор, прочитавши його код. Крім того, рекурсивні аналізатори спуску, як правило, швидші, ніж керовані таблицею. Однак для дуже складних мов слід коду буде більшим. Це було проблемою у 1960-х та 1970-х роках. Тоді лише такі невеликі мови, як, наприклад, Pascal, були реалізовані таким чином через обмеження обладнання.
Розроблені ANTLR парсери зазвичай знаходяться в районі 10 000 рядків коду і більше. Рукописні рекурсивні аналізатори спуску часто знаходяться в одному і тому ж бальному парку. Компілятор Wirth Oberon є, мабуть, найбільш компактним з приблизно 4000 рядками коду, включаючи генерацію коду, але Oberon - це дуже компактна мова, що містить лише близько 40 виробничих правил.
Як уже хтось зазначав, великим плюсом для ANTLR є графічний інструмент IDE, який називається ANTLRworks. Це повна лабораторія проектування граматики та мови. Він візуалізує ваші граматичні правила під час їх введення, і якщо він виявить конфлікти, він графічно покаже, що таке конфлікт і що його викликає. Він навіть може автоматично переробити і вирішити конфлікти, такі як ліва рекурсія. Після того, як у вас є безконфліктна граматика, ви можете дозволити ANTLRworks проаналізувати вхідний файл вашої мови та побудувати дерево розбору та AST для вас та графічно показати дерево в IDE. Це дуже велика перевага, оскільки це може заощадити багато годин роботи: Ви знайдете концептуальні помилки у мовній конструкції, перш ніж розпочати кодування! Я не знайшов такого інструменту для граматики LALR, схоже, такого інструмента немає.
Навіть людям, які не бажають генерувати свої парсери, але ручним кодом їх, ANTLRworks є прекрасним інструментом для мовного дизайну / складання прототипів. Цілком можливо найкращий такий інструмент. На жаль, це не допоможе вам, якщо ви хочете створити парсери LALR. Перехід з LALR на LL просто для того, щоб скористатися ANTLRworks, можливо, буде доцільним, але для деяких людей перемикання типів граматики може бути дуже болючим досвідом. Іншими словами: YMMV.