编译原理复习资料练习题二(LR文法) 联系客服

发布时间 : 星期六 文章编译原理复习资料练习题二(LR文法)更新完毕开始阅读73735004de80d4d8d15a4f2f

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 1 2 3 4 5 6 7 8 9 a s3 s6 s3 r3 s6 r2 ACTION b s4 s7 s4 r3 s7 r2 # acc r1 r3 r2 S 1 GOTO B 2 5 8 9 步骤 0 1 2 3 4 5 6 7 8 9

状态 0 03 034 038 02 026 0267 0269 025 01 符号 # #a #ab #aB #B #Ba #Bab #BaB #BB #S 输入串 abab# bab# ab# ab# ab# b# # # #

# acc

二、给定文法G(S):

S?(L)aSaL?L,SS

写出句子(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分析表如下

状态 0 1 2 3 4 5 6 7 ( r2 S2 r2 S4 r2 r1 S4 r1 ACTION ) r2 S5 r2 S7 r1 # r2 Acc r1 GOTO S 1 3 6 假定输入串为( )( ),请给出LR分析过程(即状态,符号,输入串的变化过程)。

答:

分析过程: 步骤 0 1 2 3 4 5 6 7

状态

0 01 012 0123 01235 01 012 0123 符号 # #S #S( #S(S #S(S) #S #S( #S(S 输入串 ()()# ()()# )()# )()# ()# ()# )# )#

8 9

01235 01 #S(S)

#S #

# acc