收藏 分享(赏)

编译原理 第七章 习题解答.doc

上传人:buyk185 文档编号:5885453 上传时间:2019-03-20 格式:DOC 页数:8 大小:769.50KB
下载 相关 举报
编译原理 第七章 习题解答.doc_第1页
第1页 / 共8页
编译原理 第七章 习题解答.doc_第2页
第2页 / 共8页
编译原理 第七章 习题解答.doc_第3页
第3页 / 共8页
编译原理 第七章 习题解答.doc_第4页
第4页 / 共8页
编译原理 第七章 习题解答.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、第七章 习题答案1拓广该文法:(0) SA (1)AaAd (2)AaAb (3)A构造 LR(0)项目集规范族如下:I0:S AA a A dA a A bA I2:A a A dA a A bA a A dA a A bA a AI3:A a A dA a A bbdI4: A a A d I5: A a A b AI1: S A a由图可知,在项目集 I0、I 2 中存在移进-归约冲突,该文法不是 LR(0)文法。在 I0 中,移进符号为 a,而归约符号为 Follow(A)=b,d,#,交集为空,可以解决冲突;在 I2 中,移进符号为 a,而归约符号为 Follow(A)=b,d,#,

2、交集为空,可以解决冲突。因此,该文法是 SLR(1)文法。SLR(1)分析表Action Goto状态a b d # A0 S2 r3 r3 r3 11 acc2 S2 r3 r3 r3 33 S4 S54 r1 r1 r15 r2 r2 r2输入串 ab#的分析过程步骤 状态栈 符号栈 输入串 Action Goto(1) 0 # ab# S2(2) 02 #a b# r3 3(3) 023 #aA b# S4(4) 0234 #aAb # r1(5) 01 #A # acc7拓广该文法:(0) SS (1) SA (2)AAb (3)AbBa(4)BaAc (5)Ba (6)BaAb构造

3、LR(0)项目集规范族如下:I0:S SS AA A bA b B aSI1: S S AI2: S A A A bI3: A b B aB a A cB aB a A bbbI4: A A b BI5: A b B aaI7: A b B a aI6: B a A cB a B a A bA A bA b B aI8: B a A cB a A bA A bbcI9: B a A c bI1 0: B a A b A A b A由图可知,在项目集 I2、I 6 中存在移进-归约冲突,该文法不是 LR(0)文法。Follow(S)=#Follow(S)=Follow(S)=#Follow(A)

4、=Follow(S)b,c=b,c,#Follow(B)=a在 I2 中,移进符号为 b,归约符号为 Follow(S)=#,交集为空,可以解决冲突;在 I6 中,移进符号为 b,归约符号为 Follow(B)=a,交集为空,可以解决冲突。因此,该文法为 SLR(1)文法。8拓广该文法:(0) SS (1) SA$ (2)ABaBb(3)ADbDa (4)B (5)D构造 LR(0)项目集规范族如下:I0:S SS A $A B a B bA D b D aB D SI1: S S AI2: S A $BI3: A B a B bDI4: A D b D a$I5: S A $ aI6: A

5、B a B bB I7: A B b D aD bBI8: A B a B bbI9: A B a B b DI1 0: A B b D aaI1 1: A B b D a 由图可知,在项目集 I0 中存在归约 -归约冲突,该文法不是 LR(0)文法。Follow(S)=#Follow(S)=Follow(S)=#Follow(A)= $Follow(B)=a,bFollow(D)=a,b在 I0 中,归约项目 B的归约符号集为 Follow(B)=a,b,归约项目 D的归约符号集为a,b,交集不为空,因此,该文法不是 SLR(1)文法。构造 LR(1)项目集规范族如下:I0:S S , #S

6、 A $ , #A B a B b , $A D b D a , $B , aD , bSI1: S S , #AI2: S A $ , #B I3: A B a B b , $D I4: A D b D a , $I5: S A $ , #a I6: A B a B b , $B , bI7: A B b D a , $D , abB I8: A B a B b , $bI9: A B a B b , $DI1 0: A B b D a , $a I1 1: A B b D a , $由图可知,不存在任何冲突,该文法是 LR(1)文法。18文法 GE:EE+T|T TT*F|F F(E)|i

7、(1)构造算符优先关系表和 LR 分析表,并对其进行适当的改写后构造预测分析表。a、计算每个非终结符的 FIRSTVT 集合:FIRSTVT(E) = FIRSTVT(E)+ FIRSTVT(T) = +,*,(,iFIRSTVT(T) = FIRSTVT(T)* FIRSTVT(F) = *,(,i FIRSTVT(F) = (,i = (,i 计算每个非终结符的 LASTVT 集合:LASTVT(E) = +LASTVT(T) = +,*,),iLASTVT(T) = *LASTVT(F) = *,),iLASTVT(F) = ,i = ,i 关系由#E#可知: # #由(E)可知: (

8、) 关系E# LASTVT(E) # +,*,),i #E+ LASTVT(E) + +,*,),i +T* LASTVT(T) * *,),i *E) LASTVT(E) ) +,*,),i ) 关系#E # FISRTVT(E) # +,*,(,i+T + FISRTVT(T) + *,(,i *F * FISRTVT(F) * (,i (E ( FISRTVT(E) ( +,*,(,i构造优先关系表如下:+ * ( ) i #+*()i#b、拓广该文法:(0) E E (1) EE+T (2) ET (3) TT*F(4) TF (5) F(E) (6) Fi构造 LR(0)项目集规范族

9、如下:I0:E EE E + TE TT T * FT FF ( E )F iEI1: E E E E + TTI2: E T T T * FFI3: T F (I4:F ( E )E E + TE TT T * FT FF ( E )F iI5: F i i+I6: E E + TT T * FT FF ( E )F iI7: T T * FF ( E )F i*EI8: F ( E )E E + TTFi(I9: E E + T T T * FTF(iFI1 0: T T * F (i+I1 1: F ( E ) )*由图可知,在项目集 I2、I 9 中存在移进-归约冲突,该文法不是 LR

10、(0)文法。Follow(E)=#Follow(E)=Follow(E)+ )=#,+,)Follow(T)=Follow(E)*=#,+,),*Follow(F)= Follow(T) =#,+,),*在 I2 中,移进符号为*,归约符号集为 Follow(E)=#,+,),交集为空,可以解决冲突;在 I9 中,移进符号为*,归约符号集为 Follow(E)=#,+,),交集为空,可以解决冲突;因此,该文法为 SLR(1)文法。SLR(1)分析表状态 + * ( ) i # E T F0 S5 1 2 31 S6 acc2 r2 S7 r2 r23 r4 r4 r4 r44 S4 S5 8

11、2 35 r6 r6 r6 r66 S4 S5 9 37 S4 S5 108 S6 S119 r1 S7 r1 r110 r3 r3 r3 r311 r5 r5 r5 r5c、消除左递归后文法为:ETE E +TE| TFT T *FT| F(E)|i可推出 的非终结符为:E、T计算每个非终结符的 First 集:FIRST(E) = FIRST(T) = (, i FIRST(E) = +, = +, FIRST(T) = FIRST(F) = (, i FIRST(T) = FIRST(T) = *, FIRST(F) = FIRST(P) = (, i 计算每个非终结符的 Follow

12、集:FOLLOW(E) = #) = #, )FOLLOW(E) = FOLLOW(E)Follow(E) = #, )FOLLOW(T) = (FIRST(E)-)FOLLOW(E) FOLLOW(E) = +, #, )FOLLOW(T) = FOLLOW (T)FOLLOW(T) = +, #, )FOLLOW(F) = (FIRST(T)-)FOLLOW(T) FOLLOW(T) = *, +, #, )计算每个产生式的 Select 集:Select(ETE) = First(T) = (, i Select(E+TE) = +Select(E ) = (FIRST()-)FOLLO

13、W(E) = #, )Select(TFT) = First(F) = (, i Select(T*FT) = *Select(T ) = (FIRST()-)FOLLOW(T) = +,#, )Select(F(E) = (Select(Fi) = i构造预测分析表如下:+ * ( ) i #E TE TEE +TE T FT FTT *FT F (E) i该文法为 LL(1)文法。(2)分别使用三种表对句子 i+i*i#进行分析。a、算符优先关系法步骤 栈 优先关系 当前符号 剩余输入串 移进或归约(1) # i +i*i# 移进(2) #i + i*i# 归约(3) #N + i*i#

14、移进(4) #N+ i *i# 移进(5) #N+i * i# 归约(6) #N+N * i# 移进(7) #N+N* i # 移进(8) #N+N*i # 归约(9) #N+N*N # 归约(10) #N+N # 归约(11) #N # 接受b、LR 分析法状态栈 符号栈 输入串 Action Goto(1) 0 # i+i*i# S5(2) 05 #i +i*i# r6 3(3) 03 #F +i*i# r4 2(4) 02 #T +i*i# r2 1(5) 01 #E +i*i# S6(6) 016 #E+ i*i# S5(7) 0165 #E+i *i# r6 3(8) 0163 #E

15、+F *i# r4 9(9) 0169 #E+T *i# S7(10) 01697 #E+T* i# S5(11) 016975 #E+T*i # r6 10(12) 01697(10) #E+T*F # r3 9(13) 0169 #E+T # r1 1(14) 01 #E # accc、预测分析法步骤 分析栈 剩余输入串 推导所用产生式(1) #E i+i*i# ETE(2) #ET i+i*i# TFT(3) #ETF i+i*i# Fi(4) #ETi i+i*i# “i”匹配(5) #ET +i*i# T (6) #E +i*i# E+TE(7) #ET+ +i*i# “+”匹配(8

16、) #ET i*i# TFT(9) #ETF i*i# Fi(10) #ETi i*i# “i”匹配(11) #ET *i# T*FT(12) #ETF* *i# “*”匹配(13) #ETF i# Fi(14) #ETi i# “i”匹配(15) #ET # T (16) #E # E (17) # # 接受(3)对于错误的输入串:(i+(*i)#和*+i)+(i*#分别查看错误的发现时刻和输入串出错的位置。a、算符优先关系法,输入串:(i+(*i)#步骤 栈 优先关系 当前符号 剩余输入串 移进或归约(1) # ( i+(*i)# 移进(2) #( i +(*i)# 移进(3) #(i +

17、 (*i)# 归约(4) #(N + (*i)# 移进(5) #(N+ ( *i)# 移进(6) #(N+( * i)# 移进(7) #(N+(* i )# 移进(8) #(N+(*i ) # 归约(9) #(N+(*N ) # 归约(10) #(N+(N ) # 移进(11) #(N+(N) # 归约(12) #(N+N # 归约(13) #(N # 出错算符优先关系法,输入串:*+i)+(i*#步骤 栈 优先关系 当前符号 剩余输入串 移进或归约(1) # * +i)+(i*# 移进(2) #* + i)+(i*# 归约(3) #N + i)+(i*# 移进(4) #N+ i )+(i*#

18、 移进(5) #N+i ) +(i*# 归约(6) #N+N ) +(i*# 归约(7) #N ) +(i*# 出错b、LR 分析法,输入串:(i+(*i)#状态栈 符号栈 输入串 Action Goto(1) 0 # (i+(*i)# S4(2) 04 #( i+(*i)# S5(3) 045 #(i +(*i)# r6 3(4) 043 #(F +(*i)# r4 2(5) 042 #(T +(*i)# r2(6) 048 #(E +(*i)# S6(7) 0486 #(E+ (*i)# S4(8) 04864 #(E+( *i)# 出错LR 分析法,输入串:*+i)+(i*#状态栈 符号

19、栈 输入串 Action Goto(1) 0 # *+i)+(i*# 出错c、预测分析法,输入串:(i+(*i)#步骤 分析栈 剩余输入串 推导所用产生式(1) #E (i+(*i)# ETE(2) # ET (i+(*i)# TFT(3) # ETF (i+(*i)# F(E)(4) # ET)E( (i+(*i)# “(”匹配(5) # ET)E i+(*i)# ETE(6) # ET)ET i+(*i)# TFT(7) # ET)ETF i+(*i)# Fi(8) # ET)ETi i+(*i)# “i”匹配(9) # ET)ET +(*i)# T(10) # ET)E +(*i)# E+TE(11) # ET)ET+ +(*i)# “+”匹配(12) # ET)ET (*i)# TFT(13) # ET)ETF (*i)# F(E)(14) # ET)ET)E( (*i)# “(”匹配(15) # ET)ET)E *i)# 出错预测分析法,输入串:*+i)+(i*#步骤 分析栈 剩余输入串 推导所用产生式(1) #E *+i)+(i*# 出错通过对 18 题的整个解答过程,比较 LL(1)分析法、算符优先分析法和 LR 分析法,归纳总结这几种分析方法各自的优缺点。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 试题课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报