文法 G 的 LALR(1) 解析器可以有移位归约 (SR) 冲突当且仅当
(A) G 的 SLR(1) 解析器存在 SR 冲突
(B) G 的 LR(1) 解析器有 SR 冲突
(C) G 的 LR(0) 解析器有 SR 冲突
(D) G 的 LALR(1) 解析器有减少减少冲突答案:(乙)
解释:
LALR(1) 和 LR(1) 解析器都使用 LR(1) 项集来形成它们的解析表。并且 LALR(1) 状态可以通过合并 LR(1) 解析器的 LR(1) 状态来找到,这些状态具有相同的项目第一组件集。
即,如果 LR(1) 解析器有 2 个状态 I 和 J,分别具有项目 A->a.bP,x 和 A->a.bP,y,其中 x 和 y 是前瞻符号,那么由于这些项目与关于它们的第一个组件,它们可以合并在一起形成一个单一的状态,比如 K。在这里我们必须考虑前瞻符号的联合。合并后,状态 K 将有一个单项作为 A->a.bP,x,y 。这样就形成了 LALR(1) 状态(即在合并 LR(1) 的状态之后)。
现在,只要状态具有以下形式的项,就会出现 LR(1) 项中的 SR 冲突:
A-> a.bB , p
C-> d. , b
i.e. it is getting both shift and reduce at symbol b,
hence a conflict.
现在,由于 LALR(1) 的第一个组件与 LR(1) 具有相似的项,因此只有在 LR(1) 状态中它已经存在时才会发生移位归约形式。如果 LR(1) 状态中没有 SR 冲突,它将永远不会反映在通过组合 LR(1) 状态获得的 LALR(1) 状态中。
注意:但是这个合并过程可能会引入RR冲突,这样Grammar就不会是LALR(1)了。这个问题的测验