如果对于一部文法中,存在至少一个句子有两个或者两个以上的语法树则该文法是二义性的。
我们可以以上面的例子进行解释,对于第棵个语法树,我们可以看到是先进行了加法运算再进行的乘法运算,因为需要先把E+E作为整体运算完后再成为E*E的右部后再进行下一步的乘法运算。
而同理我们可以看出右边的那棵语法树是先进行的乘法运算然后再进行的加法运算。
这个句子产生二义性的原因在于:
- 没有定义乘法运算与加法运算的优先级
- ‘+’与‘*’的自身结合规则不明确
如果要消除二义性我们定义乘法的优先级比加法高,所以先进行乘法运算:
E->E+T|T
T->T*F|F
F->(F)|i
对于Chomsky分类有以下内容: