首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BNF vs EBNF vs ABNF:选择哪个?

BNF vs EBNF vs ABNF:选择哪个?
EN

Stack Overflow用户
提问于 2010-04-05 00:19:59
回答 6查看 9.4K关注 0票数 38

我想提出一种语言语法。我读过一些关于这三个方面的文章,我真的看不到一个人可以做另一个人不能做的事情。有什么理由使用一个而不是另一个?或者这只是一个偏好的问题?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-04-05 00:46:50

您必须考虑将EBNFABNF作为扩展,以帮助您在开发语法时更加简洁和富有表现力。

例如,考虑一个可选的非终结符,在BNF语法中,您可以使用如下中间符号来定义它:

代码语言:javascript
复制
A        ::= OPTIONAL OTHER
OPTIONAL ::= opt_part | epsilon

而在使用EBNF时,您可以使用可选语法直接执行此操作:

代码语言:javascript
复制
A ::= [opt_part] OTHER

然后,由于在BNF中无法表示优先级,因此您必须始终使用中间符号来进行嵌套选择:

代码语言:javascript
复制
BNF
A ::= B C
B ::= a | b | c

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

这对于EBNFABNF语法中允许的许多语法问题都是正确的,这要归功于语法糖,而不是普通的BNFABNF扩展了EBNF,允许你做更复杂的事情,比如指定一个符号在一起出现的次数(即4*DIGIT)

因此,选择ABNFEBNF作为语法的首选语言将使您的工作变得更容易,因为您将更具表现力,而不会使用解析器生成器无论如何都会生成的无用符号填充语法,但是您不会关心它们!

票数 36
EN

Stack Overflow用户

发布于 2015-04-26 17:22:09

根据维基百科的说法,ABNF的双引号字符串文字是不区分大小写的,区分大小写的匹配必须定义为数字ASCII值。我认为这是一个缺点。

通过使用用引号(")括起来的字符串来指定

文本。这些字符串不区分大小写,使用的字符集是(US-)ASCII。因此,字符串“ABC”将匹配“ABC”、“ABC”、“ABC”、“ABC”、“ABC”、“ABC”、“ABC”和“ABC”。对于区分大小写的匹配,必须定义显式字符:要匹配“aBc”,定义将为%d97.66.99

https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_Form#Terminal_values

但是,RFC7405似乎向ABNF添加了区分大小写的字符串文字。

https://www.rfc-editor.org/rfc/rfc7405

票数 6
EN

Stack Overflow用户

发布于 2010-04-05 00:50:27

EBNF是BNF的扩展/更新版本,因此问题变得更简单: EBNF与ABNF。我不是专家,但我认为它应该依赖于一种您想要定义其语法的语言。还有一些用于EBNF (http://www.google.co.il/search?sourceid=chrome&ie=UTF-8&q=Ebnf-Visualizer)的可视化工具,但没有看到任何用于ABNF的可视化工具。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2575044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档