编译原理习题答案某课本貌似是清华出版那本ch_第1页
编译原理习题答案某课本貌似是清华出版那本ch_第2页
编译原理习题答案某课本貌似是清华出版那本ch_第3页
编译原理习题答案某课本貌似是清华出版那本ch_第4页
编译原理习题答案某课本貌似是清华出版那本ch_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译原理课后习题第七章第 7 章 LR 分析第1题 已知文法 AaAd|aAb|判断该文法是否是 SLR(1)文法,若是构造相应分析表,并对输入串 ab#给出分析过程。:文法:AaAd|aAb|文法为 G,增加产生式 SA若产生式排序为:0123S AA AAaAdaAb由产生式知:(S ) = ,a(A ) = ,aFollow(S ) = #Follow(A ) = d,b,#G的 LR(0)项目集族及识别活前缀的 DFA 如下图所示:在 I0 中:A .aAd 和A .aAb 为移进项目,A .为归约项目,存在移进-归约不是 LR(0)文法。在 I0、I2 中:Follow(A) a=

2、d,b,# a=,因此所给文法1盛威网()专业的计算机站编译原理课后习题第七章所以在 I0、I2 中的移进-归约构造的 SLR(1)分析表如下:题目 1 的 SLR(1)分析表可以由 Follow 集解决,所以 G 是 SLR(1)文法。题目 1 对输入串 ab#的分析过程分析成功,说明输入串 ab 是文法的句子。2盛威网()专业的计算机站状态栈(se stack)文法符号栈剩余输入串(input left)动作(action)0#ab#.Shift0 2#ab#.Reduce by :A 0 2 3#aAb#.Shift0 2 3 5#aAb#.Reduce by :A aAb0 1#A#.

3、状态(Se)ActionGotoadb#A0S2r3r3r311acc2S2r3r3r333S4S54r1r1r15r2r2r2编译原理课后习题第七章第2题 若有定义二进制数的文法如下: SLL|LLLB|B B0|1试为该文法构造 LR 分析表,并说明属哪类 LR 分析表。给出输入串 101.110 的分析过程。:文法:SL.L|LLLB|B B0|1文法为 G,增加产生式 SS若产生式排序为:0123456S SS S L L BBL.LLLBB01由产生式知:(S ) = 0,1(S(L(B)=0,10,10,1Follow(S ) = #Follow(S Follow(LFollow(

4、B)=#.,0,1,#.,0,1,#G的 LR(0)项目集族及识别活前缀的 DFA 如下图所示:3盛威网()专业的计算机站编译原理课后习题第七章在 I2 中:B .0 和 B .1 为移进项目,S L.为归约项目,存在移进-归约是 LR(0)文法。在 I2、I8 中:Follow(s) 0,1= # 0,1=,因此所给文法不所以在 I2 、I8 中的移进-归约构造的 SLR(1)分析表如下:题目 2 的 SLR(1)分析表可以由 Follow 集解决,所以 G 是 SLR(1)文法。4盛威网()专业的计算机站状态(Se)ActionGoto01#S L B012345678S4S5acc S6

5、S4S5r2r4r4r4r4 r5r5r5r5 r6r6r6r6 S4S5r3r3r3r3 S4S5r11 2 3.7.8 3.7编译原理课后习题第七章题目 2 对输入串 101.110#的分析过程分析成功,说明输入串 101.110 是题目 2 文法的句子。5盛威网()专业的计算机站状态栈(se stack)文法符号栈剩余输入串(input left)动作(action)00 50 30 20 2 40 2 70 20 2 50 2 70 20 2 60 2 6 50 2 6 30 2 6 80 2 6 8 50 2 6 8 70 2 6 80 2 6 8 40 2 6 8 70 1# #1

6、 #B #L #L0 #LB #L #L1 #LB #L #L.#L.1 #L.B #L.L #L.L1 #L.LB #L.L #L.L0 #L.LB #S101.110#.01.110#.01.110#.01.110#.1.110#.1.110#.1.110#.110#.110#.110#.110#.10#.10#.10#.0#.0#.0#.#.#.#.ShiftReduce by :B 1 Reduce by :S LB ShiftReduce by :B 0 Reduce by :S LB ShiftReduce by :B 1 Reduce by :S LB ShiftShiftRed

7、uce by :B 1 Reduce by :S B ShiftReduce by :B 1 Reduce by :S LB ShiftReduce by :B 0 Reduce by :S L.L编译原理课后习题第七章第3题 考虑文法 S A S | bA S A | a构造文法的 LR(0)项目集规范族及相应的 DFA。如果把每一个 LR(0)项目看成一个状态,并从每一个形如 B X的状态出发画一条标记为 X 的箭弧刀状态 B X,而且从每一个形如 B A的状态出发画标记为的箭弧到所有形如 A 的状态。这样就得到了一个 NFA。说明这个 NFA 与(a)中的 DFA 是等价的。构造文法的

8、SLR 分析表。对于输入串 bab,给出 SLR 分析器所作出的动作。 (5)构造文法的 LR(1)分析表和 LALR 分析表。:(1)令文法 G为(0) S SSSAAA SbS Aa其 LR(0)项目集规范族及识别该文法活前缀的 DFA 如下图所示:FOLLOW(S)=#,a,bFOLLOW(A)=a,bLR(0)项目:6盛威网()专业的计算机站编译原理课后习题第七章(2)显然,对所得的 NFA 求闭包,即得上面的 LR(0)项目集,即 DFA 中的状态。故此 NFA与(a)中 DFA 是等价的。(3)文法的 SLR 分析表如下:因为 I5 中:FOLLOW(A)a,b I7 中:FOLL

9、OW(S)a,b所以,该文法不是 SLR(1)文法。7盛威网()专业的计算机站状态actiongotoab#SA0S4S3121S4S3acc652S4S3723r2r2r24r4r45S4/ r3S3/r3726S4S3657S4 / r1S3 / r1r165编译原理课后习题第七章或者:从分析表中可看出存在歧义,所以不是该文法 SLR(1)文法。注意:不是 SLR(1)文法就不能构造 SLR(1)分析表,也不能作分析过程。(4)对于输入串 bab,SLR 分析器所作出的动作如下:(在第 5 个动作产生歧义)(5)LR(1)项目集族为: I0 :S S, #S S SAAS, #b, #SA

10、, a / ba, a / bI1 : S S,#A A A SS SA,a, a SA,a/ a/ b b/ bAS, a / bb, a / bI2 : S AS, #S b, # S AS, #A SA, a / b8盛威网()专业的计算机站步骤状态栈符号栈当前字符剩余字符串动作(1)0#bab#移进(2)03#bab#归约 Sb(3)01#Sab#移进(4)014#Sab#归约 Aa(5)015#SAb#归约 ASA(6)02#Ab#移进(7)023#Ab#归约 Sb(8)027#AS#归约 SAS(9)01#S#接受编译原理课后习题第七章Aa, a/ bS I3:b,#A I4:a,

11、a / bI5:S S S A AA SA, a / b AS, a / b AS, a / bb, a/ bSA, a / ba, a / bI6: A SA,a/bA SA, a / b A a, a / b S AS, a / bS b, a / bI7: S b, a / bI8 : S AS, # SA, a / bSA, a / ba, a / bAS, a / bA A A SSb, a /bI9 :S S S SAAS, #AS, #b, #SA, a / ba, a / bI10 :S A A A SSAS, a/bSA, a/bS A, a/ba, a / bb, a/bA

12、S, a / bI11 :9盛威网()专业的计算机站编译原理课后习题第七章S S S AAAS, a/bb, a/bAS, a / bS A, a/ba, a / bI12 :SA, a/bAS, a/bb, a/bAS, a / bS A, a/ba, a / bS S S S AAI5 状态集中存在“归约移进”法构造 LALR 分析表。,故无法构造 LR(1)分析表,因而也就无注意:其实是可以构造的,这个题目出得不太严格。因为书上的定义是:根据这种文法构造的 LR(1)分析表不含多重定义时,称 这样的分析表为 LR(1)分析表,能用 LR(1)分析表的分析器称为 LR(1)分析器(规范的

13、LR 分析器),能构造的 LR(1)分析表的文法称为 LR(1)文法。习题:(1)列出这个文法的所有 LR(0)项目(2)按(1)列出的项目构造识别这个文法活前缀的 NFA,把这个 NFA 确定化为 DFA,说明这个 DFA 的所有状态全体这个文法的 LR(0)规范族(3)这个文法是 SLR 的吗?若是,构造出它的 SLR 分析表(4)这个文法是 LALR 或LR(1)的吗?答:(1)令文法 G为012S SS A SS b10盛威网()专业的计算机站编译原理课后习题第七章A S AA a其 LR(0)项目:(2) 识别这个文法活前缀的 NFA 如上图所示:确定化为 DFA 如下图所示:11盛

14、威网()专业的计算机站编译原理课后习题第七章(3)因为 I5 中:FOLLOW(A)a,b I7 中:FOLLOW(S)a,b所以,该文法不是 SLR(1)文法。(4)LR(1)项目集族为:I0 :S S, #S S SAAS, #b, #SA, a / ba, a / bI1 : S S,#A A A SS SA,a, a SA,a/ a/ b b/ bAS, a / bb, a / b12盛威网()专业的计算机站编译原理课后习题第七章I2: S AS,#b, #AS, #SA, a / bS S AAa, a/ bS I3:b,#I4:A a,a / bI5:S S S A AA SA,

15、a / b AS, AS,a / ba / bb, a/ bSA, a / ba, a/ bI6: A SA,a/bA SA, a / b A a, a / b S AS, a / bS b, a / bI7: S b, a / bI8 : S AS, # SA,A A A SSa / bSA, a / ba, a/ bAS, a / bb, a/ bI9 :S S S SAAS, #AS, #b, #SA, a / ba, a / bI10 :S AS, a/bA SA, a/b A S A, a/b13盛威网()专业的计算机站编译原理课后习题第七章A a, a / b S b, a/bS

16、AS, a / bI11 :AS, a/bb, a/bAS, a / bS A, a/ba, a / bS S S AAI12 :SA, a/bAS, a/bb, a/bAS, a / bS A, a/ba, a / bS S S S AA因为 I5 状态集中存在“归约移进”文法。,所以不是 LR(1)文法,也不是 LALR14盛威网()专业的计算机站编译原理课后习题第七章第6题 文法 G=(U,T,S,a,b,c,d,e,P,S)其中 P 为:SUbTS|Sc|d UUS|e判断 G 是 LR(0),SLR(1),LALR(1)还是 LR(1),说明理由。构造相应的分析表。:文法:SUbTS

17、|Sc|d UUS|e文法为 G,增加产生式 SS若产生式排序为:01234567S SS S T T T UUUTaTbSScdUSe由产生式知:(S ) = d,e(S(U(T)=d,eed,eFollow(S ) = #Follow(SFollow(U Follow(T)=a,b,c,d,e,#d,ea,b15盛威网()专业的计算机站编译原理课后习题第七章G的 LR(0)项目集族及识别活前缀的 DFA 如下图所示:在 I1 中:S S.为接受项目,T S. 为归约项目,T S.c 为移进项目,存在接受-归约和移进-归约,因此所给文法不是 LR(0)文法。在 I1 中:Follow(S)

18、Follow(T)= Follow(T) c= a ,b在 I8 中:Follow(U) Follow(T) # a ,b=c=c=d,e a ,b c=所以在 I1 中的接受-归约和移进-归约与 I8 中的移进-归约和归约-归约Follow 集解决,所以 G 是 SLR(1)文法。可以由16盛威网()专业的计算机站编译原理课后习题第七章构造的 SLR(1)分析表如下:第8题 证明文法: SA$ ABaBb|DbDa BD是 LR(1)但不是 SLR(1)。(其中$相当于#):文法:ABaBb|DbDa BD文法为 G,增加产生式 SA若产生式排序为:01234SAA A BDBaBbDbDa

19、由产生式知:(S ) = a,b17盛威网()专业的计算机站状态(Se)ActionGotoabcde#SUT0S5S41231r3r3S6Acc2S5S48273S94r7r75r5r56r4r47S10S98r3r3S6r6r69r2r2r2r2r2r210r1r1r1r1r1r1编译原理课后习题第七章(A(B(D)=a,bFollow(S ) = #Follow(AFollow(B Follow(D)=#a,ba,bG的 LR(1)项目集族及识别活前缀的 DFA 如下图所示:在 I0 中:B .,a 和 T .,b 为归约项目,但它们的搜索符不同,若当前输入符为 a 时用产生式 B 归约

20、,为 b 时用产生式 D 归约,所以该文法是 LR(1)文法。若不看搜索符,在 I0 中项目 B .和 T .为归约-归约,而Follow(B ) Follow(D ) = a,b a,b不是 SLR(1)文法。构造的 LR(1)分析表如下:题目 4 的LR(1)分析表,不能用 Follow 集解决,所以该文法18盛威网()专业的计算机站SeActionGotoa . b . #ABD0123456789r3r4.Acc S4.S5r3 r4.S8 S9.r1 r2123. 67编译原理课后习题第七章第 16题 给定文法:Sdo S or S|do S|S; (1)(2)(3)构造识别该文法活

21、前缀的 DFA。该文法是 LR(0)吗?是 SLR(1)吗?说明理由。若对一些终结符的优先级以及算符的结合规则规定如下:or 优先性大于 do;服从左结合;;优先性大于 do ;;优先性大于 or ;a)b)c)d)请构造该文法的 LR 分析表,并说明 LR(0)项目集中是否存在和如何解决的。:首先化简文法,用d 代替do;用o 代替 or;用a 代替 SdSoS|dS|S;S|a文法为 G,增加产生式 SS若产生式排序为:act;文法可写成:01234S SS S SSdSoSdSS;Sa由产生式知:(S ) = d,a(S ) = d,aFollow(S ) = #Follow(S ) =

22、 o,;,#(1)识别该文法活前缀的 DFA 如下图。19盛威网()专业的计算机站编译原理课后习题第七章(2) 该文法不是 LR(0)也不是 SLR(1)因为:在 I5、I6、和 I8 中存在移进-归约又由于 Follow(S ) = o, ; ,#在 I6、和I8 中:,因此所给文法不是 LR(0)文法。Follow(S ) ; =o, ; ,# ; =;在 I5 中:Follow(S ) ; , o =o , ; ,# ; , o =; , o 所以该文法也不是 SLR(1) 文法。此外很容易证明所给文法是二义性的,SSdSoSddSoSSSdSddSoS因此该文法不可能满足 LR 文法。

23、(3) 若对一些终结符的优先级以及算符的结合规则规定如下:a)b)c)d)or 优先性大于 do;服从左结合;;优先性大于 do ;;优先性大于 or ;20盛威网()专业的计算机站编译原理课后习题第七章则:在 I5 中:“or 和;优先性都大于 do”,所以遇输入符 o 和; 移进;遇#号归约。在 I6 中:“; 号服从左结合”,所以遇输入符属于 Follow(S )的都应归约。在 I8 中:“; 号优先性大于 do ”, 所以遇输入符为;号 移进;遇 o 和#号归约。此外,在 I1 中:接受和移进可以不看成,因为接受只有遇#号。由以上分析,所有存在的移进-归约可用规定的终结符优先级以及算符

24、的结合规则解决,所构造的 LR 分析表如下:21盛威网()专业的计算机站状态(Se)ActionGotodo;a#S0S2S311S4Acc2S2S353r4r4r44S2S365S7S4r26r3r3r37S2S388r1r4r1编译原理课后习题第七章附加题问题 1:试判别如下文法是否 LR(0)或 SLR(1)文法:a) 文法 GE:E E + T TT (E) id id E其中 E,T 为非终结符,其余符号为终结符b) 文法 GS:S Ab ABcaA ab其中 S,A,B 为非终结符,其余符号为终结符:a) 增加产生式 SE,得增广文法 GS构造识别活前缀的有限状态机如下:22盛威网

25、()专业的计算机站编译原理课后习题第七章可验证:状态 I3 有移进-归约,所以 GE不是 LR(0)文法;进一步,因Follow(T)=+,#,不含,所以 GE是SLR(1)文法。b) 增加产生式 SS,得增广文法 GS构造识别活前缀的有限状态机如下:I4 存在归约/归约, I3存在归约/移进.因此不是LR(0)文法。能否使用SLR(1)方法解决:I4 中,因为 Follow(S) = # 而 Follow(B) = c.所以可以解决。 I3中,因Follow(A) = b,不含 a,因此该移进/归约是SLR(1)文法也可解决.文法参考解答:为下列文法构造 LR(1)分析表,并给出串 baab

26、# 的分析过程:增广文法文法 GS:S S(0)(1)(2)(3)S X X XXaX b其中 S,S,X 为非终结符,其余符号为终结符参考解答:参见P146 的例子, 自行补充对输入串 baab#的分析过程23盛威网()专业的计算机站编译原理课后习题第七章问题 2:(1)构造下列文法 G(P)的 LR(1)FSM,验证它是 LR(1)文法:P P P P (0)(1)(2)(3)P P(P)Aa(4) A 其中 P,P,A 为非终结符(2)通过合并同芯集(状态)的方法构造相应于上述 LR(1)FSM并判断 G(P)是否 LALR(1)文法?的LALR(1)FSM,:(1) 构造文法 G(P)

27、的 LR(1)项目集族和转换函数如下:P(aAAAaP(I5:P P(P.)P P.(P), (/#, (/)(P),所以 G(P)是 LR(1)文法。其中的每个状态均无宏(2) 可以看出:I2 和 I6,I3 和 I8,I4 和 I9,I5 和 I10,I7 和 I11 是同芯状态. 通过合并同芯状态的方法构造相应于上述 LR(1)转换图的 LALR(1)转换图 如下:24盛威网()专业的计算机站I11:P P(P). , (/)I7:P P(P). , (/#I10:P P(P.) , (/)P P.(P) , (/)I4:P Aa. , (/#I8:P P(.P) , (/)P .P(P

28、) , (/)P .Aa, (/)P ., (/)A ., aI2:P A.a , (/#I6:P A.a , (/)I3:P P(.P) , (/#P .P(P) , (/)P .Aa, (/)P ., (/)A ., aI9:P Aa. , (/)I1:SP., # P P.(P) , (/#I0:S.P, # P .P(P) , (/#P .Aa, (/#P ., (/#A ., a编译原理课后习题第七章P(AAaP()可以看出: 所有状态都不存在移进-归约和归约-归约法。.所以,G(P)是LALR(1)文问题 3:设文法 G 为:S ABA | aB | b(1)证明它是 LR(1)文

29、法; (2)构造它的 LR(1)分析表;(3)给出输入符号串 abab 的分析过程。:(1)(0)(3)文法G:S S(1) S B aBA(2) A BA(5) B bA (A) =(4), a, b25盛威网()专业的计算机站I7-11:P P(P). , (/)/#I5-10:P P(P.) , (/)/#P P.(P) , (/)I4-9:P Aa. , (/)/#I2-6:P A.a , (/)/#I3-8:P P(.P) , (/)/#P .P(P) , (/)P .Aa, (/)P ., (/)A ., aI1:SP., # P P.(P) , (/#I0:S.P, # P .P

30、(P) , (/#P .Aa, (/#P ., (/#A ., a编译原理课后习题第七章(B) = a, b构造的 DFA 如下:SABBAabbaBba由项目集规范族看出,不存在该文法是 LR(1)文法。动作。(2)LR(1)分析表如下:26盛威网()专业的计算机站状态ActionGotoaB#SAB0S4S5r31231acc2r13S4S5r3634S4S575r5r5r5I4:BaB, a|b|# BaB, a|b|# Bb, a|b|#I5:Bb, a|b|#I7:BaB,a|b|#I6: ABA, #I3: ABA, #ABA, #A, #BaB, a|b|# Bb, a|b|#I

31、0: SS, #SA, #ABA, #A, #BaB,a|b|# Bb, a|b|#I2: SA, #I1: SS, #编译原理课后习题第七章(3)输入串 abab 的分析过程为:问题4:给定文法G(S):S SS L (L) aL , S S试为该文法配上属性计算的语义规则(或动作)集合(即设计一个属性文法),它输出配对括号的个数。如对于句子(a,(a),输出是2。:产生式语义规则SSpr(S.num)S(L)Sa LL1,SLSS.num:=L.num+1S.num:=0L.num:=L1.num+S.numL.num:=S.num27盛威网()专业的计算机站步骤状态栈符号栈当前字符剩余字

32、符串动作(1)0#abab#移进(2)04#abab#移进(3)045#abab#归约 Bb(4)047#aBab#归约 BaB(5)03#Bab#移进(6)034#Bab#移进(7)0345#Bab#归约 Bb(8)0347#BaB#归约 BaB(9)033#BB#归约 A(10)0336#BBA#归约 ABA(11)036#BA#归约 ABA(12)02# A#归约 SA(13)01#S#acc6r27r4r4r4编译原理课后习题第七章问题5:给定文法GS:S L (L) aL , S S如下是相应于GS的一个属性文法:SSLL(1)(2)(3)(4)(L)aL1 , S S.num :=

33、 L.num +1; S.num := 0; L.num := L1.num + S.num; L.num := S.num; S下图分别是输入串 ( a,( a) ) 的语法分析树和对应的带标注语法树,但其属性值没有标出,试将其标出(即填写右下图中符号“=”右边的值)。:28盛威网()专业的计算机站编译原理课后习题第七章问题 6:对上题中所给的GS的属性文法是一个S-属性文法,故可以在自下而上分析的过程中,增加一个语义栈来计算属性值。下图(a)是 GS的一个 LR 分析表, 图(b) 描述了输入串( a,( a ) ) 的分析和计值过程(语义栈中的值对应15)行没有给出,试补齐之。S.num

34、或L.num),其中,第 14),题 3 图(a)29盛威网()专业的计算机站编译原理课后习题第七章题 3 图(b):# ( L)# S#14)15)024601- - 1 - 2问题 7:下面的属性文法 GN可以将一个二进制小数转换为十进制小数,令 N.val 为 GN生成的二进制数的值,例如对输入串 101.101, N.val=5.625.2 S .len2N S S B S1S1 BS2 N.val := S1.val +*S2 .val ; S.val := 2 * S1.val + B.val; S.len := S1.len + 1 BS.val = B.val;B.val :=

35、0S.len:= 1 030盛威网()专业的计算机站编译原理课后习题第七章B 1B.val:= 1(1) 试消除该属性文法(翻译模式)中的左递归,以便可以得到一个可以进行自上而下进行语义处理(翻译)的翻译模式;(2) 对变换后的翻译模式,构造一个自上而下翻译程序。:(1)消去原文法中的左递归:N S R R B B S S BRBR01可验证该文法是 LL(1)文法。再考虑语义规则,得到如下翻译模式:2 S .len2N S1S2 N.val := S1.val +*S2 .val ;S.len := R.slen R.sval:=R1.sval;S B R.ival := B.val; R.

36、ilen := 1 R S.val := R.sval;R B R1.ival:=2*R.ival+B.val; R1.ilen:=R.ilen+1R.slen:=R1.slenR1R B B R.sval:=R.ival; R.slen:=R.ilen01B.val :=0B.val :=1(2) 对变换后的翻译模式,可构造一个如下的自上而下翻译程序:real ParseN()(S1val,S1len) := ParseS();/变量 S1val,S1len 分别对应属性 S1.val,S1.lenMatchToken();/匹配, 函数 MatchToken 参见第 4 讲,本例省略/变量

37、 S2val,S2len 分别对应属性 S2.val,(S2val,S2len) := ParseS();S2.lenNval := S1val + 2 (-S2len)return Nval;* S2val ;/变量 Nval 对应属性 N.val(,) ParseS()/(,)代表一个/结构类型31盛威网()专业的计算机站编译原理课后习题第七章Bval := ParseB(); Rival := Bval;Rilen := 1;(Rsval, Sval := Slen :=returnRslen) := ParseR(Rival, Rilen); Rsval;Rslen ;(Sval,Sl

38、en);(,)ParseR(Rival,Rilen)switch(lookahead) / lookahead 为下一个输入符号case 0, 1: Bval := ParseB();R1ival := 2*Rival+Bval;R1ilen := Rilen+1;(R1sval, Rsval := Rslen :=break;R1slen) := R1sval;R1slen ;ParseR(R1ival,R1ilen);case , #: Rsval:=Rival; Rslen:=Rilen; break;default:prf(syntax errorn)exit(0);return (R

39、sval,Rslen);ParseB()switch (lookahead) case 0:MatchToken(0); Bval := 0;break; case 1:MatchToken(1); Bval := 1;break;default:prf(syntax errorn)exit(0);32盛威网()专业的计算机站编译原理课后习题第七章return Bval;问题 8:对于上题(1)所得到的翻译模式(结果应满足 L-属性的条件),在进行自下而上的语义处理时,语义栈中的值有两个分量,分别对应文法符号的综合属性 val 和 len。若该翻译模式中,嵌在产生式中间的语义规则集中含有除复写

40、规则之外的语义规则,则变换该翻译模式,使嵌在产生式中间的语义规则集中仅含复写规则;根据(1)所得到的新翻译模式,文法符号的所有继承属性均可以通过归约前已出现在分析栈中的综合属性进行。试写出在按每个产生式归约时语义处理的代码片断(设语义栈由向量 v 表示,归约前栈顶位置为 top,语义值 vi的两个分量分别用 vi.val 和 vi.len 表示)。:(1) 将如下翻译模式2 S .len2N S1S2 N.val := S1.val +*S2 .val ; S B R.ival := B.val; R.ilen := 1 R S.val := R.sval; S.len := R.slen R

41、 B R1.ival:=2*R.ival+B.val; R1.ilen:=R.ilen+1R.slen:=R1.slenR1R.sval:=R1.sval;R B B R.sval:=R.ival; R.slen:=R.ilen01B.valB.val:=0:=1变换为:2 S .len2N S1S2 N.val := S1.val +*S2 .val ; S B M.bval := B.val M R.ival := M.sval; R.ilen := M.val R S.val := R.sval; S.len := R.slen R B P.rival:= R.ival; P.rilen

42、:= R.ilen; P.bval:=B.val; P R1.ival:= P.sval;R1.ilen:= P.slen R.sval:=R1.sval; R.slen:=R1.slen R.sval:=R.ival; R.slen:=R.ilenR1R B B M P 01B.val :=0B.val :=1 M.sval := M.bval; M.val := 1 P.sval = 2*P.rival + P.bval; P.sleP:= P.rilen +1(2)按每个产生式归约时语义处理的代码片断:N S1 S2vtop-2.val := vtop-2.val + 2(-vtop.len) * vtop.val; S R R B BMPRR1vtop-2.val := vtop.val; vtop-2.len := vtop.len vtop-2.val := vtop.val; vtop-2.len := vtop.len vtop+1.val := vtop.val; vtop+1.len := vtop.len 33盛威网()专业的计算机站编译原理课后习题第七章B B M 01

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论