我想提出一种语言语法。我已经阅读了这三个方面的内容,并且看不到一个人能做的事而另一个人却做不到的事。有什么理由要使用另一个?还是只是偏爱问题?
最佳答案
您必须考虑将 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 作为语法的选择语言将使您的工作更加轻松,因为您无需在语法上填充语法分析器生成的无用符号,就可以提高表达能力,但您获得了成功不在乎他们!
关于syntax - BNF vs EBNF vs ABNF:选择哪个?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2575044/