Коко / Р против ANTLR - PullRequest
       46

Коко / Р против ANTLR

6 голосов
/ 27 апреля 2010

Я оцениваю использование Coco / R против ANTLR для использования в проекте C # как часть того, что по сути является функцией слияния с возможностью написания сценариев. Для разбора (простых) скриптов мне понадобится парсер .

Я сосредоточился на Coco / R и ANTLR, потому что оба кажутся довольно зрелыми и ухоженными и способны генерировать приличные парсеры C #.

Однако ни тот, ни другой не кажутся тривиальными в использовании, и простота - это то, что я бы оценил - особенно ремонтопригодность другими.

У кого-нибудь есть рекомендации? Каковы плюсы / минусы либо для синтаксического анализа небольшого языка, либо я полностью изучаю неправильные вещи? Насколько хорошо они интегрируются в типичную установку непрерывной интеграции? Какие подводные камни?

Связанный: Ну, много вопросов, таких как 1 , 2 , 3 , 4 , 5 .

Ответы [ 4 ]

4 голосов
/ 14 февраля 2014

Мы использовали Coco в течение 2 лет, заменив Antler, который мы использовали ранее. Для типичного запроса больших данных (нашего приложения) наш опыт таков. Предостережение: мы зависим от полной обработки Utf-8 с парсером, реализованным в C ++. Эти цифры относятся к языку, который имеет около 200 произведений EBNF.

  • Antler: 260 usecs / query и объем памяти MEGABYTE 108 для сгенерированного парсера / лексера
  • Coco: 220 usecs / query и 70 КБайт памяти для анализатора / сканера

Изначально у Coco было время запуска 1,2 мсек, и было сгенерировано несколько таблиц по 60 KBYTE для отображения Utf-8. Мы сделали много локальных улучшений в Coco, таких как устранение больших таблиц, устранение времени запуска 1,2 мс, значительно улучшенная внутренняя документация (а также документация в сгенерированном коде).

Наша версия Coco (с открытым исходным кодом) имеет крошечную площадь по сравнению с Antlr, очень значительно быстрее, без задержки запуска и просто ... работает. У него нет приятного пользовательского интерфейса Antler, но мы никогда не думали об этом, когда начали использовать Coco.

3 голосов
/ 28 апреля 2010

ANTLR - это LL (*), такой же мощный, как PEG, но обычно гораздо более эффективный и гибкий. LL (*) вырождается в LL (k) при k> 1, один произвольный прогноз не нужен.

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

По сути, coco / r генерирует парсеры рекурсивного спуска и поддерживает только грамматики LL (1), тогда как ANTLR использует обратное отслеживание (среди других методов), что позволяет ему обрабатывать более сложные грамматики. синтаксические анализаторы coco / r гораздо более легки и их легче понять и развернуть, но иногда бывает трудно получить грамматику в форме, понятной coco / r, с учетом одного ограничения на просмотр - для многих распространенных грамматик языка программирования (например, C ++, SQL), это вообще невозможно.

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

Если вы просто объединяете данные в сложный шаблон, рассмотрите механизм Terence Parr StringTemplate . Он человек, стоящий за ANTLR. StringTemplate может лучше подходить и проще в использовании, чем генератор полного синтаксического анализатора. Это очень многофункциональный шаблонизатор.

В загрузках имеется порт C # * .

...