不确定的,不显眼的语法?

时间:2012-08-12 18:53:54

标签: parsing grammar context-free-grammar non-deterministic glr

根据wikipedias GLR description,他们“处理不确定和含糊不清的语法。” 我可以想象一个含糊不清的语法,比如dangling else problem,但是什么是不确定的CF语法并不含糊?

1 个答案:

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