3

我正在做一个需要我解析 BNF 语法的学校项目。对于管道字符(|)(我认为它的意思是“或”)在规则中扮演的角色,我有点困惑。

例如,如果我有以下内容:

<a> ::= b c d | e f g

哪个终端是 | 应用于?使用括号进行分组,这将描述如何应用“或”?

(bcd) | (电子表格)

(bc) (d) | (e) (fg)

是| 应用于整组终端,或者只是 |? 旁边的两个终端。

如果我有这样的设置怎么办:

<a> ::= b | <c> <d>
<b> ::= e | f
<c> ::= g | h

如果<c>并且<d>提到非终端,它仍然是真的吗?到什么| 在这种情况下适用吗?

4

2 回答 2

4

一般来说,

rule := a b c | d e f

被分组为

rule := (a b c) | (d e f)

无论您将它们应用于终端还是非终端,这都不会改变。

于 2012-07-20T04:42:56.597 回答
0

http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form

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

于 2012-07-20T04:47:01.573 回答