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


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

Существует ли другая форма для описания языка, чем форма Backus-Naur? Какие альтернативы я должен рассмотреть?

5 4
bnf

5 ответов:

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

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

Нотация синтаксиса Вирта

Ван Wijngaarden грамматики

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

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

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

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

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

"M" от Microsoft

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