我想提出一种语言语法。我读过一些关于这三个人的内容,但确实看不出有什么是一个人能做而另一个人做不到的。有什么理由使用其中一种而不是另一种吗?或者这只是一个偏好问题?
你必须考虑一下EBNF and ABNF作为扩展,可以帮助您在开发语法时更加简洁和富有表现力。
例如,考虑一个可选的非终结符,在BNF您可以使用中间符号来定义它,例如:
A ::= OPTIONAL OTHER
OPTIONAL ::= opt_part | epsilon
当与EBNF您可以使用可选语法直接执行此操作:
A ::= [opt_part] OTHER
那么由于没有办法在 a 中表达优先级BNF对于嵌套选择,您也必须始终使用中间符号:
BNF
A ::= B C
B ::= a | b | c
EBNF
A ::= (a | b | c) C
这对于许多语法问题都是正确的。EBNF or ABNF语法,感谢语法糖,但不是正常的BNF. ABNF延伸EBNF,允许您做更复杂的事情,例如指定可以一起找到一个符号的出现次数(即4*DIGIT
)
所以选择一个ABNF or an EBNF因为您的语法选择的语言将使您的工作更轻松,因为您将更具表现力,而无需在语法中填充无用的符号,这些符号无论如何都会由您的解析器生成器生成,但您不会关心它们!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)