Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing SLR(1)和LALR(1),关于解析表和简化状态_Parsing_Lr_Parse Tree_Compiler Construction - Fatal编程技术网

Parsing SLR(1)和LALR(1),关于解析表和简化状态

Parsing SLR(1)和LALR(1),关于解析表和简化状态,parsing,lr,parse-tree,compiler-construction,Parsing,Lr,Parse Tree,Compiler Construction,几天前我问了一个问题,我做了大量的搜索并联系了一些教授,但我不能总结第二个问题的解决方案是对的还是错的。我们有两个不同年份的入学考试问题 两个问题是选择题。在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 问

几天前我问了一个问题,我做了大量的搜索并联系了一些教授,但我不能总结第二个问题的解决方案是对的还是错的。我们有两个不同年份的入学考试问题

两个问题是选择题。在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的答案:

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

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


第二季度的答案:

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

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

(b) :无错误条目表示移位条目和减少条目。应该清楚地注意到,在自下而上的解析器中,从一个解析器到另一个解析器,只有reduce条目的规则发生了变化,而shift条目的规则保持不变。例如,在LR(0)中,reduce条目在每一列中生成,在SLR(1)中,reduce条目在左侧变量后面生成,而在CLR(1)和LALR(1)中,reduce条目在前视符号中生成。因此,减少不同解析器之间的条目更改,但移位条目是相同的

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

(a) T1和T2可能是相同的,但并不总是相同的。另一件重要的事情是,多项选择题有时希望你们选择最合适的选项。因此,对我来说,(a)是答案