Каковы недостатки использования ANTLR по сравнению с Flex / Bison? - PullRequest
8 голосов
/ 27 ноября 2009

Я работал над Flex, Bison несколько лет назад, когда учился в университете. Тем не менее, я мало что помню об этом сейчас. Недавно я пришел, чтобы услышать об ANTLR.

  • Вы бы порекомендовали мне изучить ANTLR или лучше почистить Flex / Bison?
  • Имеет ли ANTLR больше / меньше возможностей, чем Flex / Bison?

Ответы [ 3 ]

7 голосов
/ 27 ноября 2009

ANTLRv3 - это LL (k), и его можно настроить как LL (*). Последний, в частности, смехотворно прост в написании синтаксических анализаторов, так как вы можете по существу использовать EBNF как есть.

Кроме того, ANTLR генерирует код, который во многом похож на анализатор рекурсивного спуска, который вы пишете с нуля. Его можно легко прочитать и отладить, чтобы понять, почему анализ не работает или работает неправильно.

Преимущество Flex / Bison (или любого другого парсера LALR) в том, что он быстрее.

2 голосов
/ 09 апреля 2010

ANTLR имеет библиотеку JAR времени выполнения, которую вы должны включить в свой проект.

Парсеры рекурсивного спуска ANTLR легче отлаживать, чем парсеры "снизу вверх", генерируемые Flex / Bison, но грамматические правила немного отличаются.

Если вам нужен генератор синтаксического анализатора Flex / Bison-стиля (LALR) для Java, посмотрите JavaCC .

0 голосов
/ 27 ноября 2009

Мы решили использовать ANTLR для некоторых наших требований к обработке информации - анализа устаревших файлов и естественного языка. Кривая обучения крутая, но мы справляемся с ней, и я чувствую, что это более современный и универсальный подход к тому, что нам нужно сделать. Недостатки - поскольку вы спрашиваете - в основном это кривая обучения, которая кажется неизбежной.

...