Наиболее существенным отличием YACC / Bison от ANTLR является тип грамматики, которую могут обрабатывать эти инструменты. YACC / Бизон обрабатывает грамматики LALR, ANTLR обрабатывает грамматики LL.
Часто людям, которые долгое время работали с грамматикой LALR, будет труднее работать с грамматикой LL, и наоборот. Это не означает, что с грамматикой или инструментами сложнее работать. Какой инструмент вы найдете более простым в использовании, в основном сводится к знакомству с типом грамматики.
Что касается преимуществ, то есть аспекты, где грамматики LALR имеют преимущества перед грамматиками LL, и есть другие аспекты, где грамматики LL имеют преимущества перед грамматиками LALR.
YACC / Bison генерируют парсер, управляемый таблицами, что означает, что «логика обработки» содержится в данных программы парсера, а не в коде парсера. Окупаемость заключается в том, что даже синтаксический анализатор для очень сложного языка имеет относительно небольшой объем кода. Это было более важно в 1960-х и 1970-х годах, когда аппаратное обеспечение было очень ограничено. Генераторы парсеров, управляемых таблицами, уходят в эту эпоху, и в то время основным требованием был небольшой объем кода.
ANTLR генерирует парсеры рекурсивного спуска, что означает, что «код логики обработки» содержится в коде парсера, так как каждое производственное правило грамматики представлено функцией в коде парсера. Окупаемость заключается в том, что легче понять, что делает парсер, читая его код. Кроме того, парсеры рекурсивного спуска обычно работают быстрее, чем таблицы. Однако для очень сложных языков объем кода будет больше. Это было проблемой в 1960-х и 1970-х годах. Тогда из-за аппаратных ограничений таким образом были реализованы только относительно небольшие языки, такие как, например, Pascal.
Сгенерированные ANTLR парсеры обычно находятся в пределах 10 000 строк кода и более. Рукописные парсеры рекурсивного спуска часто находятся на одной площадке. Компилятор Wirth's Oberon, пожалуй, самый компактный, с примерно 4000 строками кода, включая генерацию кода, но Oberon - это очень компактный язык, имеющий всего около 40 правил производства.
Как уже отмечалось, большой плюс для ANTLR - это графический инструмент IDE, который называется ANTLRworks. Это полная лаборатория грамматики и языкового дизайна. Он визуализирует ваши грамматические правила по мере их ввода и, если обнаружит какие-либо конфликты, наглядно покажет вам, что это за конфликт и что его вызывает. Он даже может автоматически рефакторировать и разрешать конфликты, такие как левая рекурсия. Если у вас есть бесконфликтная грамматика, вы можете позволить ANTLRworks разобрать входной файл вашего языка, построить для вас дерево разбора и AST и графически отобразить дерево в IDE. Это очень большое преимущество, потому что оно может сэкономить вам много часов работы: вы обнаружите концептуальные ошибки в вашем языковом дизайне, прежде чем начнете кодировать! Я не нашел такого инструмента для грамматики LALR, кажется, такого инструмента нет.
Даже для людей, которые не хотят генерировать свои парсеры, а пишут их вручную, ANTLRworks - отличный инструмент для разработки и создания прототипов языка. Вполне возможно, лучший такой инструмент доступен. К сожалению, это не поможет вам, если вы хотите создавать LALR-парсеры. Переключение с LALR на LL просто для того, чтобы воспользоваться преимуществами ANTLRworks, может быть целесообразным, но для некоторых людей переключение типов грамматики может быть очень болезненным. Другими словами: YMMV.