Любая BNF IDE с тестовыми функциями - PullRequest
11 голосов
/ 12 января 2010

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 12 января 2010

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

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

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

5 голосов
/ 16 января 2010

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

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

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

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

Разница между DMS и Bison заключается в том, что DMS разработан для поддержки всех аспектов построения полного языкаанализатор / переводчик (Unicode lexing, анализ GLR с отчетами об ошибках и их восстановлением, автоматическое построение дерева, построение таблицы символов, анализ управления и потока данных, преобразования, prettyprinting, ...).Если вы хотите серьезно оценить свой «новый язык», вам, в конечном счете, придется все это делать, и Бизон - лишь маленький шаг на этом пути.DMS будет нести вас весь путь.

1 голос
/ 29 сентября 2012

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

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

0 голосов
/ 21 января 2010

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

...