我正在开展一个学校项目,要求我解析BNF语法。我对管道字符(|) - 我认为的意思是“或” - 在一个规则中扮演什么角色感到有点困惑。
例如,如果我有以下内容:
<a> ::= b c d | e f g
哪个终端是|应用于?使用括号进行分组,这将描述如何应用“或”?
(b c d) | (e f g)
(b c)(d) | (e)(f g)
是|应用于整个终端集,或者仅仅是|?
旁边的两个终端如果我有这样的设置怎么办?
<a> ::= b | <c> <d>
<b> ::= e | f
<c> ::= g | h
如果<c>
和<d>
引用非终端,它仍然是真的吗?什么会|适用于这种情况?
答案 0 :(得分:4)
一般来说,
rule := a b c | d e f
分组为
rule := (a b c) | (d e f)
这不会改变您是否将它们应用于终端或非终端。
答案 1 :(得分:0)
请参阅http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form
您可以查看|作为最低优先级运算符。