Инструменты Lexer / parser

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

7 ответов


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

мой оригинальный ответ указывая на теперь удален вопрос:

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

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

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


плохая новость заключается в том, что большинство реальных компьютерных языков не являются "LALR(1)", Что означает, что вам нужно прибегнуть к значительному хакерству, чтобы заставить yacc анализировать реальные языки.

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

Если вы не uncomprising так, как вы хотели свой синтаксис, ГЛР анализаторы руки вниз победителя. Мы используем их в инструментарий реинжиниринга программного обеспечения DMS и построили Парсеры качества производства для некоторых 30 + языков, включая C++, у которого есть народная теорема, говорящая, что ее почти невозможно разобрать. Народная теорема была начата людьми, использующими Парсеры LL и LALR для обработки c++. ДЖЛР делает это легко.


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

другое преимущество что оно делает здание АСТ тривиально легким со своей встроенной поддержкой для строя АСТ которое пропущено в Бизоне.

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


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

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


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


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

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

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

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


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