Augmented Backus-Naur Form 中的替代运算符 ( /
) 是可交换的吗?
例如, s = a / b
是否与 s = b / a
相同?
最佳答案
我还没有在 BNF 或 ABNF 上找到任何主要来源,它们在双方都产生有效匹配时明确指定 /
语义。他们也没有提到上下文无关文法和他们对非确定性的允许。如果有人知道澄清引用文献,请分享。
编辑 :Tony 的 answer 指出 2003 年的 RFC 3501 指定了 ABNF 交替的语义,至少在该文档中使用了它。
RFC 5234: Augmented BNF for Syntax Specifications: ABNF (2008)
介绍对比了 BNF 和 ABNF(此处添加了重点):
“选择性引用”和“顺序无关”可能与交替排序语义有关,但尚不清楚。
RFC 822: Standard for the Format of ARPA Internet Text Messages (1982)
除非我遗漏了什么,否则引用的 RFC 也没有指定 /
语义。 2.2 节回避了这个问题。
各种规则定义表明他们认识到避免歧义的实际重要性。例如,以下是 RFC 822 定义 optional-field
及其依赖项的方式:
optional-field =
/ "Message-ID" ":" msg-id
/ "Resent-Message-ID" ":" msg-id
/ "In-Reply-To" ":" *(phrase / msg-id)
/ "References" ":" *(phrase / msg-id)
/ "Keywords" ":" #phrase
/ "Subject" ":" *text
/ "Comments" ":" *text
/ "Encrypted" ":" 1#2word
/ extension-field ; To be defined
/ user-defined-field ; May be pre-empted
extension-field =
<Any field which is defined in a document
published as a formal extension to this
specification; none will have names beginning
with the string "X-">
user-defined-field =
<Any field which has not been defined
in this specification or published as an
extension to this specification; names for
such fields must be unique and may be
pre-empted by published extensions>
The Syntax and Semantics of the Proposed International Algebraic Language of the Zurich ACM-GAMM Conference(巴科斯 1958)
BNF 来自 IAL 符号。论文中引入了̅o̅r“元语言连接词”,直观上与
/
相关。然而,它也避免了二义性选择问题,大概只是小心翼翼地使用它。推荐
由于未指定的语义,我的建议是将
alternation
规则中的每个可能匹配视为有效。当语法没有精心设计以避免歧义时,这种解释可能会导致同一输入的多个有效解析树。在发生歧义解析时解决它们比使用无意中有效的解析树更安全。或者,如果您对语法的指定方式有影响,则可以考虑使用语义更清晰的符号。例如,Parsing Expression Grammar: A Recognition-Based Syntactic Foundation (Ford 2004) 给出了替代确定性优先选择语义(最左边的比赛获胜)。