Инструменты лексера / парсера - PullRequest
7 голосов
/ 30 марта 2009

Какой генератор лексера / анализатора является лучшим (самым простым в использовании, самым быстрым) для C или C ++? Я сейчас использую flex и bison, но bison обрабатывает только грамматику LALR (1). Язык, который я анализирую, не действительно требует неограниченного просмотра, но неограниченный просмотр сделает анализ намного проще. Должен ли я попробовать Antlr? Coco / R? Elkhound? Что-то еще?

Ответы [ 7 ]

5 голосов
/ 24 сентября 2009

Обновлено 2015-01-05:

Мой оригинальный ответ , указывающий на удаленный вопрос:

Есть куча хороших ответов на этот вопрос уже в Какой генератор парсера вы порекомендуете

Итак, я взял список элементов из удаленного ответа на archive.org , набрав хотя бы 1 голос здесь:

Я сам сделал несколько систем flex / bison, но теперь я бы заменил оба на Lemon из sqlite, так как это один инструмент, реентерабельный и поточно-ориентированный, а также имеющий потоковую / тяговую основанная модель.

3 голосов
/ 20 июня 2009

Плохая новость заключается в том, что большинство настоящих компьютерных языков не являются "LALR (1)", что означает, что вам приходится прибегать к значительным хакерским атакам, чтобы YACC анализировал настоящие языки.

Если вы разрабатываете DSL, вы можете использовать любые генераторы синтаксического анализатора LALR без особых проблем именно потому, что вы можете изменить грамматику своего DSL, когда генератор анализатора закричит. Генераторы парсера LL в основном работают и здесь по той же причине, но отсутствие левой рекурсии может быть настоящей болью.

Если вам не нравится то, как вам нравится ваш синтаксис, парсеры GLR - победители. Мы используем их в DMS Software Reengineering Toolkit и создали парсеры производственного качества для более чем 30 языков, включая C ++, в котором есть народная теорема о том, что ее практически невозможно проанализировать. Народная теорема была начата людьми, использующими парсеры LL и LALR, чтобы попробовать C ++. GLR делает это легко.

1 голос
/ 15 октября 2009

ANTLR делает неограниченный просмотр очень простым, используя опцию «возврата». Он также может соответствовать вашим критериям «самый простой в использовании, самый быстрый», поскольку он имеет ANTLRWORKS, который позволяет вам визуализировать и отлаживать грамматику.

Еще одним преимуществом является то, что он упрощает сборку AST благодаря встроенной поддержке создания AST, отсутствующей в зубрах.

С двумя опубликованными книгами - «ANTLR: полное руководство» и «Шаблоны языкового проектирования» - это одна из очень хорошо документированных доступных инструментов. У вас также есть очень активный список рассылки.

0 голосов
/ 17 мая 2013

LRSTAR 9.1 может генерировать парсеры LR (1) и LR (*). Это система на основе C ++, дружественная для Windows и Visual Studio. Он создает парсеры, управляемые таблицами, и лексеры, управляемые таблицами, которые являются небольшими и быстро компилируются. Парсеры LRSTAR могут создавать AST автоматически.

0 голосов
/ 28 сентября 2009

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

http://www.gnu.org/software/bison/manual/bison.html#GLR-Parsers

Я сам не использовал эту функцию.

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

0 голосов
/ 30 марта 2009

Я использую систему разбора GOLD (http://www.devincook.com/goldparser) с очень хорошими результатами. Мой проект небольшой, система разбора файлов NC в C. Но я думаю, что инструмент может работать и с более сложными проектами.

0 голосов
/ 30 марта 2009

Я не знаю, что именно вы ищете, но я думаю, что Boost Xpressive стоит посмотреть ...

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

...