SLR(1)和LALR(1)和减少

时间:2014-10-03 15:54:10

标签: parsing compiler-construction programming-languages lalr lr

我确切地混淆!!!!!!

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

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(减少)的元素数量大于L.

但在一个网站上我读到了:

2)假设对于语法G,使用SLR(1)和LALR(1)创建T1,T2。如果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)的解析表完全相同,(错误和非错误条目相等,减少数量)是等于)但是对于上述语法,S中的Reduced数量大于L.

我在另一本书中看到,一般来说我们有:

enter image description here

要点:

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

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

2 个答案:

答案 0 :(得分: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)解析器中,每个项目都有一组关联的前瞻标记。每当解析器进入其中包含reduce项的状态时,如果下一个输入标记位于前瞻集中,则解析器将执行该缩减。在SLR(1)解析器中,超前设置是生产左侧非终端的FOLLOW设置。在LALR(1)解析器中,前瞻集合适当地称为LA集合,用于生成和自动机状态中的非终结符合。

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

希望这有帮助!

答案 1 :(得分:0)

回答Q1:

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

链接到DFA SLR(1) and LALR(1) DFAs

的图像

对于SLR(1),我有10个状态和10个减少条目,而对于LALR(1),我为CLR(1)创建了DFA,其中13个状态被最小化到10个状态,有7个减少条目。多数民众赞成回答你的第一个问题。


回答Q2:

G是SLR(1)语法,然后SLR(1)表中肯定没有冲突(或错误)S-R或R-R。 LALR(1)的功率大于SLR(1),因此对于给定的语法G,LALR(1)表也没有冲突。让我们看看选项的选项

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

(b):非错误条目表示移位条目和减少条目。应该清楚地注意到,从解析器到解析器的自底向上解析器只有减少条目的规则更改,而移位条目的规则保持相同。例如,在LR(0)中,在每列中进行减少条目,对于SLR(1),它在左侧变量的FOLLOW中完成,而在CLR(1)和LALR(1)中减少条目以在先行符号中进行。因此减少条目从解析器到解析器的更改,但是移位条目是相同的。

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

(a)T1和T2可能相同但并非总是如此。而其他重要的事情是,多项选择题有时会要求您选择最合适的选项。因此对我来说(a)就是答案