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

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

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


person Community    schedule 13.02.2009    source источник


Ответы (5)


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

Дополненный BNF

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

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

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

person jheriko    schedule 13.02.2009

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

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

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

person Per Stilling    schedule 13.02.2009

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

person soulmerge    schedule 13.02.2009

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

"M" от Microsoft

person Jon Simpson    schedule 13.02.2009

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

person leen    schedule 13.02.2009