BNF по сравнению с EBNF по сравнению с ABNF: чтобы выбрать?

Я хочу придумать синтаксис языка. Я читал немного об этих трех, и ничего не могу действительно видеть, что можно сделать это, другой не может. Там какая-либо причина состоит в том, чтобы использовать один по другому? Или это - просто вопрос предпочтения?

28
задан Jason Baker 4 April 2010 в 16:19
поделиться

3 ответа

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

Например, подумайте о необязательном нетерминальном символе, в грамматике BNF вы должны определить его, используя промежуточные символы, например:

A        ::= OPTIONAL OTHER
OPTIONAL ::= opt_part | epsilon

, а с EBNF вы можете это сделать напрямую с использованием необязательного синтаксиса:

A ::= [opt_part] OTHER

Затем, поскольку нет способа выразить приоритет в BNF , вы должны всегда использовать промежуточные символы также для вложенных вариантов:

BNF
A ::= B C
B ::= a | b | c

EBNF
A ::= (a | b | c) C

Это верно для многих допустимых синтаксических проблем в грамматике EBNF или ABNF , благодаря синтаксическому сахару, но не с нормальным BNF . ABNF расширяет EBNF , позволяя выполнять более сложные операции, например указывать, сколько вхождений символа можно найти вместе (например, 4 * DIGIT )

Таким образом, выбор ABNF или EBNF в качестве языка для вашей грамматики упростит вашу работу, поскольку вы будете более выразительными, не заполняя грамматику бесполезными символами, которые будут генерироваться в любом случае с помощью вашего генератора парсеров, но они вам наплевать!

29
ответ дан 28 November 2019 в 03:37
поделиться

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

Я прочитал BNF , EBNF и ABNF из Википедии, и в нем описаны некоторые различия и почему EBNF и ABNF вошли в картину на основе BNF

0
ответ дан 28 November 2019 в 03:37
поделиться

EBNF - это расширенная / новая версия BNF, поэтому проблема упрощается: EBNF против ABNF. Я не эксперт, но думаю, что это должно зависеть от языка, синтаксис которого вы хотите определить. Также есть несколько визуализаторов для EBNF ( http://www.google.co.il/search?sourceid=chrome&ie=UTF-8&q=Ebnf-Visualizer ), но не нашел для ABNF,

2
ответ дан 28 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: