编译原理复习资料练习题二(LR文法)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LR文法复习
LR分析法通常包括了4种具体的分析方法:LR(0)、SLR(1)、LR(1)、LALR(1)分析法,这4种LR分析法的原理如图0.2所示。
这4种LR分析法的总控程序是相同的,只是分析表不同。关键是掌握构造分析表的方法,以及使用分析表进行分析的方法。LR(0)是LR分析法的基础,首先要深刻地理解LR(0)分析法的思想,熟练掌握LR(0)文法的判断方法和LR(0)分析表的构造方法,这里再次强调,其方法是非常机械的,只要多加练习,就可以掌握得非常牢固。
在掌握了LR(0)分析法后,就可以看出LR(0)分析法要求构造出的识别可归前缀的有穷自动机的各个状态不能有冲突项目,而SLR(1)分析可以部分地解决这个问题,其方法是向前多看一个输入符号,这样又需要掌握SLR(1)分析法,同样要注意其适用的文法限制和分析表的构造方法。要注意SLR(1)只是部分解决了LR(0)的缺陷,当我们需要进一步加强分析法的能力时,就到达了LR(1)分析法和LALR(1)分析法。
这4种分析法都掌握后,最好仔细总结一下其内在的关系,使用的文法限制等。总之,这部分要掌握每种分析法适用的文法,并能构造出相应分析表,以及应该做到当给出一个该文法的句子,能够跟踪使用分析表进行分析。
LR文法练习
一、构造出文法G(S):
(1)S → BB
(2)B → aB
(3)B→ b
的LR 分析表。假定输入串为abab ,请给出LR 分析过程(即按照步骤给出状态,符号,输入串的变化过程)。
答:
步骤 状态 符号 输入串 0 0 # abab# 1 03 #a bab# 2 034 #ab ab# 3 038 #aB ab# 4 02 #B ab# 5 026 #Ba b# 6 0267 #Bab # 7 0269 #BaB # 8 025 #BB #
9 01 #S # acc
二、给定文法G (S ):
S
S L L a aS L S ,)(→→
写出句子(a,a,aa ) 的规范规约过程,并指出每一步的句柄。
答:规范规约的过程:
句型(带下划线的是句柄) 规约规则 (a,a,aa ) S →a
(S,a,aa) L→S
(L,a,aa) S→a
(L,S,aa) L→L,S
(L,aa) S→a
(L,aS) S→aS
(L,S) L→L,A
(L) S→(L)
S
三、设已构造出文法G(S):
S→S(S)
S→ε
的LR分析表如下
假定输入串为( )( ),请给出LR分析过程(即状态,符号,输入串的变化过程)。
答:
分析过程:
步骤状态符号输入串
0 0 # ()()#
1 01 #S ()()#
2 012 #S( )()#
3 0123 #S(S )()#
4 0123
5 #S(S) ()#
5 01 #S ()#
6 012 #S( )#
7 0123 #S(S )#
8 01235 #S(S) #
9 01 #S # acc