根据wikipedias GLR description,他们“处理不确定和含糊不清的语法。” 我可以想象一个含糊不清的语法,比如dangling else problem,但是什么是不确定的CF语法并不含糊?
答案 0 :(得分:2)
几乎任何非LR(k)语法都是非确定性的,但不一定是模棱两可的。显而易见的例子是,当你有一些非常大的构造,可以通过两种方式解析,哪种是正确的取决于大型构造之后的东西。例如:
S ::= A x | B y
A ::= A a | a
B ::= B a | a
然而,如果解析大型构造的两种方式可以组合(如同S ::= A x | A y
的上述语法,这是一种确定性方法,那么这种非确定性语法通常可以重新编写,以便具有确定性。解析相同的语言。)
更有趣的是语言本质上是非确定性的 - 即语言没有确定性语法。为此,需要在任意大型构造内部存在需要匹配后续内容的内容。例如:
S ::= X x | Y y
X ::= a X a | x
Y ::= a Y a | y