Parsing 不确定、不虔诚的语法?

Parsing 不确定、不虔诚的语法?,parsing,grammar,context-free-grammar,non-deterministic,glr,Parsing,Grammar,Context Free Grammar,Non Deterministic,Glr,根据他们的说法,他们“处理不确定性和模棱两可的语法。” 我可以想象一个模棱两可的语法,比如,但是什么是不确定的CF语法而不是模棱两可的?几乎任何非LR(k)语法都是不确定的,但不一定是模棱两可的。一个明显的例子是,当你有一个可以用两种方式解析的任意大的构造时,哪个是正确的取决于这个大构造后面的东西。例如: S ::= A x | B y A ::= A a | a B ::= B a | a 然而,如果可以将解析大型构造的两种方法结合起来(如S::=A x | A y,对于上述语法,这是解析同

根据他们的说法,他们“处理不确定性和模棱两可的语法。” 我可以想象一个模棱两可的语法,比如,但是什么是不确定的CF语法而不是模棱两可的?

几乎任何非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

悬而未决的else问题是一个模棱两可的语法,而不是一种模棱两可的语言。这种歧义在语法中很容易修复,为同一种语言提供了一种非歧义语法。