这两个语法定义之间是否存在差异(|
表示OR而;
只是常规字符)?
1. <foo> ::= <bar> | <foo> ; <bar>
2. <foo> ::= <bar> | <bar> ; <foo>
在我看来,无论使用哪个定义,foo都会匹配看起来像<bar> ; <bar> ; <bar> ; ....
的序列。我在这里遗漏了什么或者功能是否相同?
答案 0 :(得分:0)
我同意它们是等价的,因为两者的最终结果是一个或多个<bar>
。但是,如果向<foo>
添加了任何新规则(这些规则涉及<bar>
以外的终端或非终端),它们可能就不再相同了。