《编译原理第七章 习题参考答案(5页).doc》由会员分享,可在线阅读,更多相关《编译原理第七章 习题参考答案(5页).doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-编译原理第七章 习题参考答案-第 5 页第1 题已知文法AaAd|aAb|判断该文法是否是SLR(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。答案:文法:AaAd|aAb|拓广文法为G,增加产生式SA若产生式排序为:0 S A1 A aAd2 A aAb3 A 由产生式知:First (S ) = ,aFirst (A ) = ,aFollow(S ) = #Follow(A ) = d,b,#G的LR(0)项目集族及识别活前缀的DFA 如下图所示在I0 中:A .aAd 和A .aAb 为移进项目,A .为归约项目,存在移进-归约冲突,因此所给文法不是LR(0)文法。在I0
2、、I2 中:Follow(A) a= d,b,# a=f所以在I0、I2 中的移进-归约冲突可以由Follow 集解决,所以G 是SLR(1)文法。构造的SLR(1)分析表如下:对输入串ab#的分析过程:第2 题若有定义二进制数的文法如下:SLL|LLLB|BB0|1(1) 试为该文法构造LR 分析表,并说明属哪类LR 分析表。(2) 给出输入串101.110 的分析过程。答案:文法:SL.L|LLLB|BB0|1拓广文法为G,增加产生式SS若产生式排序为:0 S S1 S L.L2 S L3 L LB4 L B5 B 06 B 1由产生式知:First (S ) = 0,1First (S
3、) = 0,1First (L ) = 0,1First (B ) = 0,1Follow(S ) = #Follow(S ) = #Follow(L ) = .,0,1,#Follow(B ) = .,0,1,#G的LR(0)项目集族及识别活前缀的DFA 如下图所示:在I2 中:B .0 和 B .1 为移进项目,S L.为归约项目,存在移进-归约冲突,因此所给文法不是LR(0)文法。在I2、I8 中:Follow(s) 0,1= # 0,1=所以在I2 、I8 中的移进-归约冲突可以由Follow 集解决,所以G 是SLR(1)文法。构造的SLR(1)分析表如下:对输入串101.110#的
4、分析过:第6 题文法G=(U,T,S,a,b,c,d,e,P,S)其中P 为:SUTa|TbTS|Sc|dUUS|e(1) 判断G 是LR(0),SLR(1),LALR(1)还是LR(1),说明理由。(2) 构造相应的分析表。答案:文法:SUTa|TbTS|Sc|dUUS|e拓广文法为G,增加产生式SS若产生式排序为:0 S S1 S UTa2 S Tb3 T S4 T Sc5 T d6 U US7 U e由产生式知:First (S ) = d,eFirst (S ) = d,eFirst (U ) = eFirst (T ) = d,eFollow(S ) = #Follow(S ) =
5、a,b,c,d,e,#Follow(U ) = d,eFollow(T ) = a,bG的LR(0)项目集族及识别活前缀的DFA 如下图所示:在I1 中:S S.为接受项目,T S. 为归约项目,T S.c 为移进项目,存在接受-归约和移进-归约冲突,因此所给文法不是LR(0)文法。在I1 中:Follow(S) Follow(T)= # a ,b=fFollow(T) c= a ,b c=f在I8 中:Follow(U) Follow(T) c=d,e a ,b c=f所以在I1 中的接受-归约和移进-归约冲突与I8 中的移进-归约和归约-归约冲突可以由Follow 集解决,所以G 是SLR(1)文法。构造的SLR(1)分析表如下: