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