SLR(1)和LALR(1),关于解析表和缩减状态

时间:2014-10-21 11:54:20

标签: parsing lr parse-tree compiler-construction

我几天前问了一个问题SLR(1) and LALR(1) and Reduce,我做了大量的搜索和联系给一些教授,但我无法总结第二个问题的解决方案是对还是错。我们在2年不同的入学考试中有2个问题。

两个问题是多选。在2010年的问题中我们有:

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

问题设计师选择解决方案为:

Solution: the number of elements with R (reduce) in S is more than L.
两年后问题设计师问:

2)假设T1,T2用SLR(1)和LALR(1)创建任意语法G.如果G是SLR(1)语法,以下哪个是真的?

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

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

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

解决方案:

(a) is selected by the question designer. 

我的问题是:

any one could describe for me why the solution of 1st question is contradict to 2nd question? 
有人在之前的帖子中回答说两种解决方案是对的,但并没有形容它的形式很好。

无论如何我等待一位让我摆脱困惑的专家!

1 个答案:

答案 0 :(得分:1)

回答Q1:

首先,您需要为SLR(1)和LALR(1)解析器创建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)就是答案