Любая BNF IDE с тестовыми функциями
Я работаю над новым языком и при написании грамматики я хотел бы иметь возможность проверить грамматику на предмет полноты, конфликтов и тому подобного. Я не особо беспокоюсь о лежащем в основе генераторе синтаксического анализатора (но один для.NET предпочтительнее)
Таким образом, список функций вкратце будет:
- функциональность построения текстового редактора
- сообщение о синтаксической / семантической ошибке
- сообщение о конфликтах
- функциональность теста грамматики (т. е. окно для написания кода в предполагаемой грамматике для проверки правильности определения грамматики)
Проект CodePlex под названием Irony действительно имеет нечто похожее на то, что я прошу, но не поддерживает написание грамматики как BNF, которая требуется.
4 ответа
Я бы порекомендовал ANTLR в качестве генератора парсера. Это очень полнофункциональный и поддерживает C#, а также множество других целевых языков.
Для IDE есть плагин для Eclipse под названием ANTLR IDE и отдельная IDE под названием ANTLRWorks, оба из которых работают хорошо.
Обратите внимание, однако, что ANTLR использует алгоритм LL(*) вместо алгоритма LR(k). Тем не менее, это очень хорошо, и ANTLRWorks может выполнить большую часть необходимого левого факторинга.
Когда вы "работаете над новым языком" и пытаетесь получить эталонный BNF, вы, вероятно, не хотите смещать вашу эталонную грамматику в сторону какого-либо конкретного генератора синтаксического анализатора. Одна из проблем написания тестовой грамматики для Bison (LALR(1)) или ANTLR(LL*) заключается в том, что вы делаете именно это. Вы также не хотите зацикливаться на том, "как я кодирую правила BNF таким образом, чтобы заставить его фактически анализировать", предположительно, потому что вы заинтересованы в работе над грамматикой, а не в работе генератора парсера.
Поэтому я бы порекомендовал использовать генератор синтаксического анализатора с полным контекстом. Это позволит вам написать грамматику в наиболее естественной форме с минимальными усилиями. Это может означать отказ от "текстового редактора", "окна тестирования редактора", ... но по моему опыту (проверьте биографию переполнения стека) использование генератора неконтекстного синтаксического анализатора полностью перекрывает эти тонкости. Edit-save-parse просто не требует больших усилий.
Я понимаю, что у Bison есть опция GLR, которая обеспечивает генерацию синтаксического анализатора без контекста, и она имеет открытый исходный код, и поэтому может использоваться только для тестирования грамматики.
Наш DMS Software Reengineering Toolkit является коммерческим и также содержит анализатор GLR, который использовался для реализации более 30 полных языков, включая C, C++ и COBOL, на нескольких диалектах, а также на более современных языках, таких как Python, Ruby, PHP.....
Разница между DMS и Bison заключается в том, что DMS разработан для поддержки всех аспектов построения полноязыкового анализатора / переводчика (лексирование Unicode, анализ GLR с отчетами и восстановлением ошибок, автоматическое построение дерева, построение таблицы символов, управление и анализ потока данных., трансформации, симпатичная печать, ...). Если вы хотите всерьез оценить свой "новый язык", вам, в конце концов, придется все это делать, и Бизон - лишь маленький шаг на этом пути. DMS будет нести вас весь путь.
Может быть, вы найдете этот инструмент полезным: Gold Parser Builder
К сожалению, это только окна.
Взгляните на BNFC, который может генерировать рабочий код и make-файл из lNedd BNF для ряда целевых языков, таких как: Haskell, OCaml, C, C++ и Java. Вы получаете красивый принтер, средство проверки абстрактного синтаксиса / принтер, скелетный код для своего собственного компилятора или интерпретатора и документацию по языку постскриптов.