📜  门|门CS 2008 |第 55 题

📅  最后修改于: 2021-09-26 04:07:59             🧑  作者: Mango

文法 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)了。这个问题的测验