описывая что-то, я должен использовать форму Бэкуса-Наура? - PullRequest
4 голосов
/ 13 февраля 2009

Я хочу описать сложный скрипт и, возможно, язык программирования. я думал описать это в форме Бэкуса-Наура, прежде чем что-то делать (исключая фиктивный / пример кода скрипта)

Есть ли другая форма для описания языка, кроме формы Бэкуса-Наура? Какие альтернативы я должен рассмотреть?

Ответы [ 5 ]

7 голосов
/ 13 февраля 2009

Очевидной альтернативой будет расширенная форма Бэкуса-Наура , однако есть несколько других, которые можно использовать, и я нашел несколько ссылок с небольшим быстрым поиском:

Увеличенный БНФ

Синтаксическая нотация вирта

грамматика Ван Вейнгаардена

Лично я бы придерживался BNF / EBNF из-за распространенности информации и инструментов, которые используют ее в той или иной форме. Такие инструменты, как bison или yacc , могут помочь с созданием синтаксического анализатора из такой грамматики и сделать его довольно простым для создания интерпретатора.

5 голосов
/ 13 февраля 2009

Зависит от того, насколько формально вы хотите описать язык. Форма Бэкуса-Наура предназначена для описания контекстно-свободных грамматик. Поэтому, если вы хотите описать неконтекстную грамматику, форма Бэкуса-Наура, вероятно, является подходящим вариантом, поскольку она является наиболее распространенной из известных форм описания их.

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

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

1 голос
/ 13 февраля 2009

BNF - хорошее начало, есть несколько генераторов синтаксического анализатора, которые могут использовать его в качестве входных данных. Boost.Spirit является хорошим примером, если вы планируете использовать C ++.

0 голосов
/ 13 февраля 2009

Вы также можете рассмотреть возможность использования ANTLR , который использует синтаксический / формальный язык, близкий к BNF. Это поможет вам в создании интерпретатора / компилятора.

0 голосов
/ 13 февраля 2009

Вы можете посмотреть на «М» от Microsoft. Это язык / синтаксис, который позволяет вам описать другой язык (как и BNF). Это используется в качестве основы для разработки вашего собственного домена, управляемого языком.

"М" от Microsoft

...