Вы должны думать о 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 в качестве языка выбора для вашей грамматики облегчит вашу работу, поскольку вы будете более выразительными, не заполняя свою грамматику бесполезными символами, которые будут в любом случае будет сгенерирован вашим генератором парсера, но вы не будете заботиться о них!