Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

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

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

Я не знаю, что вы точно ищете, но я думаю, что это повышение впечатляющий стоит посмотреть...

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

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

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

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

Хотя сам я этой функцией не пользовался.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top