📜  门| Sudo GATE 2021 测验 |第 50 题

📅  最后修改于: 2021-09-25 07:25:35             🧑  作者: Mango

考虑以下 LR(1) 文法的两组 LR(1) 项。

X -> c.X, c/d
   X -> .cX, c/d
   X -> .d, c/d
   X -> c.X, $
   X -> .cX, $
   X -> .d, $

以下哪些与在相应的 LALR 解析器中合并两个集合相关的陈述是错误的?

注意 –此问题是多选题 (MSQ)。
(A)可以合并,因为前瞻不同。
(B)可以合并但会导致SR冲突。
(C)可以合并但会导致RR冲突。
(D)可以合并,因为 c 上的 goto 会导致两个不同的集合。答案: (B) (C)
说明:给定的两个 LR(1) 项目集是:

X -> c.X, c/d
X -> .cX, c/d
X -> .d, c/d
and
X -> c.X, $
X -> .cX, $
X -> .d, $ 

逗号后的符号/终结符是 Look-Ahead 符号。

这些是 LR(1)(LR(1) 也称为 CLR(1))项的集合。

LALR(1) 解析器组合了 LR(1) 项集,这些项集在第一个组件方面相同但在第二个组件方面不同。

在 LR(1) 项集 ( A -> B , c ) 的产生式规则中,A->B 是第一个组件,而先行符号集(此处为 c)是第二个组件.

现在我们可以看到在给定的集合中,对应产生式规则的第一个组件在两个集合中是相同的,它们仅在第二个组件(即它们的前瞻符号)上不同,因此我们可以将这些集合组合成一个单一的集合将会 :

X -> c.X, c/d/$
X -> .cX, c/d/$
X -> .d, c/d/$

这样做是为了减少解析器状态的总数。

现在我们可以检查给出的语句。

陈述 1:该陈述是正确的,因为合并已经完成,因为第二个组件即前瞻不同。

语句 2 :在合并的集合中,我们看不到任何 Shift-Reduce 冲突(因为甚至不可能减少,当存在形式 P -> q. 的产生式时,减少是可能的)

语句 3:在合并的集合中,我们看不到任何 Reduce-Reduce 冲突(原因同上,甚至不可能有任何 reduce,所以没有 RR 冲突的机会)

陈述4:这个陈述也成立,因为goto是带在非终结符上的,而不是终结符上的,而c是终结符。

选项(B)和(C)是正确的。
这个问题的测验
如果您发现上面的帖子有任何错误,请在下面评论