资源描述:
《编译原理第8章作业及习题参考答案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理作业参考答案-5-第八章语法制导翻译和中间代码生成1.给出下面表达式的逆波兰表示(后缀式):(1)a*(-b+c)(4)(A∧B)∨(ØC∨D)(7)if(x+y)*z=0thens∶=(a+b)*celses∶=a*b*c解(1)ab-c+*(4)AB∧CØD∨∨(7)xy+z*0=sab+c*:=sab*c*:=¥(注:¥表示if-then-else运算)¥=:=*0:=+xyzs+cxabs*c*ab2.请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。答案:三元式 (1)(+a,b) (2)(+c,d) (3)(*(1
2、),(2)) (4)(-(3),/) (5)(+a,b)(6)(+,(5),c)(7)(-(4),(6)) 间接三元式 间接三元式序列 间接码表 (1)(+a,b) (1) (2)(+c,d) (2) (3)(*(1),(2)) (3) (4)(-(3),/) (4)编译原理作业参考答案-5- (5)(-(4),(1)) (1)(6)(-(4),(5)) (5)(6) 四元式 (1)(+,a,b,t1) (2)(+,c,d,t2) (3)(*,t1,t2,t3) (4)(-,t3,/,t4)(5)(+,a,b,t5)(6)(+,t5
3、,c,t6) (6)(-,t4,t6,t7)3.采用语法制导翻译思想,表达式E的"值"的描述如下: 产生式 语义动作 (0)S′→E {printE.VAL} (1)E→E1+E2 {E.VAL∶=E1.VAL+E2.VAL} (2)E→E1*E2 {E.VAL∶=E1.VAL*E2.VAL} (3)E→(E1) {E.VAL∶=E1.VAL} (4)E→n {E.VAL∶=n.LEXVAL}如果采用LR分析法,给出表达式(5*4+8)*2的语法树并在各结点注明语义值VAL。S’*E1E2E0E32E5.VAL=585*E5E6+E44E
4、6.VAL=4E4.VAL=8E3.VAL=20E1.VAL=28E2.VAL=2E0.VAL=56Print(56)4.假如习题3中表达式E的“值”有两种类型:整型和实型。语义处理增加"类型匹配检查",请给出相应的语义描述。编译原理作业参考答案-5-解: (0)S′→E{iferror≠1thenprintE.VAL} (1)E→E1+E2{ifE1.TYPE=intANDE2.TYPE=intthen begin E.VAL:=E1.VAL+E2.VAL; E.YTPE:=int; end
5、 elseifE1.TYPE=realANDE2.TYPE=realthen begin E.VAL:=E1.VAL+E2.VAL; E.YTPE:=real; end elseerror=1 } (2)E→E1*E2{ifE1.TYPE=intANDE2.TYPE=intthen begin E.VAL:=E1.VAL*E2.VAL;; E.YTPE:=int;
6、 end elseifE1.TYPE=realANDE2.TYPE=realthen begin E.VAL:=E1.VAL*E2.VAL;; E.YTPE:=real; end elseerror=1 } (3)E→(E1){E.VAL:=E1.VAL; E.TYPE:=E1.TYPE} (4)E→n{E.VAL:=n.LEXVAL; E.TYPE:=n.LEXTYPE}5.令综合属性val给
7、出在下面的文法中的S产生的二进制数的值(如,对于输入101.101,则S.val=5.625)。S->L.L
8、LL->LB
9、BB->0
10、1解1:提示画出对应于输入101.101的语法树,然后设置相应的属性进行语义规则的创立。产生式语义规则S->L1.L2编译原理作业参考答案-5-S->LS.val:=L.valL->L1BL.val:=L1.val*2+B.valL.length:=L1.length+1L->BL.val:=B.valL.length:=1B->0B