Любая BNF IDE с тестовыми функциями

Я работаю над новым языком и при написании грамматики я бы хотел проверить грамматику на предмет полноты, конфликтов и тому подобного. Я не очень беспокоюсь о генераторе синтаксического анализатора (но для .NET предпочтительнее)

Итак, список функций будет коротким:

  • функция создания текстового редактора
  • отчет о синтаксисе/семантике ошибок
  • отчеты о конфликтах
  • функциональность грамматического теста (то есть окно для код написания в предполагаемой грамматике для проверки правильности определение грамматики)

Проект CodePlex под названием Irony действительно имеет что-то похожее на то, что я прошу, но не поддерживает запись грамматики в качестве BNF, которая требуется.

Ответ 1

Я бы рекомендовал ANTLR в качестве генератора парсера. Он очень функциональный и поддерживает С#, а также множество других целевых языков.

Для IDE есть плагин для Eclipse, называемый ANTLR IDE и автономная среда IDE, называемая ANTLRWorks, оба из которых хорошо работают.

Обратите внимание, однако, что ANTLR использует алгоритм LL (*) вместо алгоритма LR (k). Тем не менее, это очень приятно, и ANTLRWorks может выполнять большую часть необходимого факторинга слева.

Ответ 2

Когда вы работаете над новым языком и пытаетесь получить ссылку BNF правильно, вы, вероятно, не хотите смещать вашу грамматику ссылок на какой-либо конкретный генератор синтаксического анализатора. Одна из проблем с написанием тестовой грамматики для Bison (LALR (1)) или ANTLR (LL *) - это именно так. Вы также не хотите зависеть от "как мне закодировать правила BNF таким образом, чтобы он фактически разбирался", предположительно потому, что вы заинтересованы в работе над грамматикой, не работая с генератором парсера.

Поэтому я бы рекомендовал использовать полный контекстный генератор парсера. Это позволит вам писать грамматику в самой естественной форме с наименьшими усилиями. Это может означать отказ от "текстового редактора", "окна тестирования редактора",... но по моему опыту (проверка моего био) с использованием генератора синтаксического анализа контекста полностью подавляет эти тонкости. Edit-save-parse просто не требует больших усилий.

Я понимаю, что у Bison есть опция GLR, которая обеспечивала бы безразличное генерирование парсера и была бы открытым исходным кодом, и поэтому она могла бы сделать только для тестирования грамматики.

Наш DMS Software Reengineering Toolkit является коммерческим, а также представляет собой анализатор GLR, который использовался для реализации около 30+ полных langauges, включая C, С++ и COBOL в ряде диалектов, а также более современные языки, такие как Python, Ruby, PHP,...

Разница между DMS и Bison заключается в том, что DMS предназначен для поддержки всех аспектов построения полного анализатора языка/переводчика (лексирование Unicode, анализ ГЛС с отчетами об ошибках и восстановлением, автоматическое построение дерева, построение таблицы символов, управление и анализ потока данных, преобразования, симплинтинг,...). Если вы хотите серьезно оценить свой "новый langauge", вам в конечном итоге нужно будет все это сделать, а Bison - лишь крошечный шаг по этой дороге. DMS будет нести вас весь путь.

Ответ 3

Посмотрите на BNFC, который может генерировать рабочий код и make файл из Labled BNF для ряда целевых языков, таких как Haskell, OCaml, C, С++ и Java. Вы получаете красивый принтер, абстрактный синтаксический контролер/принтер, скелетный код для своего собственного компилятора или интерпретатора и документацию по языковому языку.

Ответ 4

Возможно, вы найдете этот инструмент полезным: Gold Parser Builder

К сожалению, это только окна.