1

我很困惑 完全正确!!!!!!!

我在我的一篇教授笔记中阅读了以下示例。

1) 我们有一个 SLR(1) 语法 G,如下所示。我们使用 SLR(1) 解析器生成器并为 G 生成解析表 S。我们使用 LALR(1) 解析器生成器并为 G 生成解析表 L。

S->AB
A->dAa
A-> lambda (lambda is a string with length=0)
B->aAb

解:S中带有R(reduce)的元素数量多于L。

但在一个网站上我读到:

2) 假设 T1、T2 是用语法 G 的 SLR(1) 和 LALR(1) 创建的。如果 G 是 SLR(1) 语法,以下哪项是正确的?

a) T1 和 T2 没有任何区别。

b) T1 中非错误条目的总数低于 T2

c) T1 中的错误条目总数低于 T2

解决方案:

LALR(1) 算法生成的状态与 SLR(1) 算法完全相同,但它可以生成不同的动作;它能够解决比 SLR(1) 算法更多的冲突。但是,如果文法是 SLR(1),则两种算法将产生完全相同的机器(a 是正确的)。

任何人都可以为我描述其中哪些是真实的?

编辑:事实上,我的问题是为什么对于给定的 SLR(1) 语法,LALAR(1) 和 SLR(1) 的解析表完全相同,(错误和非错误条目相等,reduce 的数量相等)但是对于上面的文法,S 中 Reduced 的个数要多于 L。

我在另一本书中看到,我们通常有:

在此处输入图像描述

概括:

1)对于我在问题1中写的上述语法,为什么减少的数量不同?

2)如果我们有一个 SLR(1) 语法,为什么表是完全一样的?(减少和错误条目的数量变得相同)

4

2 回答 2

2

这两种说法都是真的!

您的问题之一是为什么 SLR(1) 和 LALR(1) 解析器具有彼此相同的状态。SLR(1) 解析器是从一个 LR(0) 自动机开始,然后用 FOLLOW 集中的前瞻信息扩充每个产生式。在 LALR(1) 解析器中,我们从 LR(1) 解析器开始(其中每个产生式都有非常精确的前瞻信息),然后组合具有相同底层 LR(0) 状态的任意两个状态。这会产生一个带有附加信息的 LR(0) 自动机,因为每个 LR(0) 状态对应于至少一个 LR(1) 状态,并且每个 LR(1) 状态对应于某个底层 LR(0) 状态。

SLR(1) 和 LALR(1) 解析器都具有相同的状态集,这些状态与 LR(0) 解析器中的状态相同。解析器的不同之处仅在于它们在每个状态中执行的操作。

在 SLR(1) 和 LALR(1) 解析器中,每个项目都有一组关联的前瞻标记。每当解析器进入其中包含缩减项的状态时,如果输入的下一个标记在前瞻集中,则解析器将执行该缩减。在 SLR(1) 解析器中,前瞻集是产生式左侧非终结符的 FOLLOW 集。在 LALR(1) 解析器中,前瞻集适当地称为 LA 集,用于组合产生式中的非终结符和自动机状态。

您可以证明 LALR(1) 解析器中使用的 LA 集是 SLR(1) 解析器中使用的 FOLLOW 集的子集。这意味着 LALR(1) 解析器永远不会比 SLR(1) 解析器有更多的归约操作,并且在某些情况下,当 SLR(1) 解析器发生移位/归约冲突时,LALR(1) 解析器将选择移位。

希望这可以帮助!

于 2014-10-03T16:26:46.823 回答
0

回答 Q1:

首先,您需要为 SLR(1) 和 LALR(1) 解析器创建 DFA。我为他们两个创建了 DFA。

链接到 DFA SLR(1) 和 LALR(1) DFA的图像

对于 SLR(1),我有 10 个状态和 10 个减少条目,而对于 LALR(1),我为 CLR(1) 创建了具有 13 个状态的 DFA,这些状态最小化为 10 个状态,有 7 个减少条目。这回答了你的第一个问题。


回答 Q2:

G 是 SLR(1) 语法,那么 SL​​R(1) 表中肯定没有冲突(或错误)SR 或 RR。LALR(1) 比 SLR(1) 更强大,因此对于给定的语法 G,LALR(1) 表中也没有冲突。让我们逐个查看选项

(c) : T1 和 T2 没有错误(错误选项)

(b) :非错误条目是指移位条目和减少条目。应该清楚地指出,在自下而上的解析器中,从解析器到解析器只有减少条目的规则发生变化,而移位条目的规则保持不变。例如,在 LR(0) 中,reduce 条目在每一列中进行,对于 SLR(1),它在左侧变量的 FOLLOW 中完成,而在 CLR(1) 和 LALR(1) 中,reduce 条目在前瞻符号中进行。因此减少从解析器到解析器的条目更改,但移位条目是相同的。

我们也已经在 Q1 证明了 SLR(1) 解析表的 reduce 条目比 LALR(1) 的多。因此证明(b)选项不正确。

(a) T1 和 T2 可能结果相同,但并非总是如此。另一个重要的事情是,多项选择题有时会让你选择最合适的选项。因此对我来说(a)就是答案

于 2015-01-18T15:42:09.007 回答