如何|影响BNF语法?

时间:2012-07-20 04:38:34

标签: bnf

我正在开展一个学校项目,要求我解析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>引用非终端,它仍然是真的吗?什么会|适用于这种情况?

2 个答案:

答案 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

您可以查看|作为最低优先级运算符。