我们首先用S′→·S作为初态集的项目,然后用闭包函数和转换函数构造识别文法G′的识别活前缀的有限自动机DFA如图7.11所示,可以发现在项目集I5和I7中存在移进和归约冲突。 I5:S→ae·c I7:S→be·d A→e· A→e· 而归约项目左部非终结符的FOLLOW(A)={c,d} 在I5中,FOLLOW(A)∩{c}={c,d}∩{c}≠ ![]() ![]() 在I7中,FOLLOW(A) ∩{d}={c,d}∩{d}≠ ![]() ![]() 因此I5,I7中冲突不能用SLR(1)方法解决。只能考虑用下面将要介绍的LR(1)方法解决。
例如:在识别表达式文法的活前缀DFA中,(见图7.10)在项目集I2存在移进-归约冲突,即{E→T· T→T·*F}若栈顶状态为2,栈中符号为#T,当前输入符为')',而')'属FOLLOW(E)中,这时按SLR(1)方法应用产生式E→T进行归约,归约后栈顶符号为#E,而再加当前符')'后,栈中为#E)不是表达式文法规范句型的活前缀。 |