《编译第8章习题(语法制导翻译和中间代码生成)参考答案.docx》由会员分享,可在线阅读,更多相关《编译第8章习题(语法制导翻译和中间代码生成)参考答案.docx(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、习题 第8章语法制导翻译和中间代码生成-课本练习部分(第202-203页)8.1 (1) (2) (3) (4) (7)(1) abc+*(3) abed/+*+(4) abAc-idVV(7 ) xy+z*0=sab+c*:=sab*c*:=8.2(注: 表不 if-then-else 运算)(6)四元式(1)(+, a, b,tl) ,/, (3) (+, c, d, t3)(4) (*, tl, t2, t4) (5) (+, a, b, t5) (6) (+, t5, c, t6) (-,t4, t5,注:一定要按照运算的顺序 三元式(1) (+,a,b)0)(-),/)(3) (+,
2、c,d)(4) (*,(1),(2)(5) (+, a, b)(6) (+,(5),c)(7) (-,(4), (6)间接三元式序列间接码表(D(+, a, b)(1),/)(2)(十, c, d)(3)(4) (*,(1),(2)(4)(5)(+,(l),c)(1)(6) (-, (3),(1)(5)8.3参考书本8.5注:以后在描述语义规则时统一用C语言的书写格式;一般来说要求大家构造的属性文法 只包含综合属性,因此大家可以采用自底向上的分析方法检查属性文法是否符合要求。引入属性vaL用来记录二进制的数值;引入属性工ngth,用来记录二进制的长度。文法规则语义规则SLl .L2S . va
3、l = LI. val+L2 . val/2L2-lengthS LS.val = L.valLf LIBL.val = LI.val*2+B.valL.length = LI.length+1Lf BL.val = B.valL.length = 1B-0B.val = 0Bf 1B.val = 18.6(1)文法规则语义规则E El+TIF (El.type=integer) & (T.type=integer) E.type = intgr;ELSEE.type = realEf TE.type = T.typeTf n nT.type = realTf nT.type = intege
4、r(2)产生式语义规则E-E1+TIF (El.type=integer) & (T.type=integer) E.type = integer;Print ( +,);)ELSEE.type = real;IF (El.type=integer)(El, type:=real;El.val:=inttoreal(El.val);IF (T type=integer)(T type:=real;T.val:=inttoreal(T.val);Print ( +,);)E TE.type = T.type;E.val = T.val; Print ( E.val )Tf n , nT.type
5、 = realT.val = n.n.lexvalTf nT.type = integer T.val = n.lexval二补充部分B8.1设有文法GS : S f (T)S f iT - J, S (首先要将产生式中左部和右部相同的非终结符区分开)T - S(1)请写出关于配对括号数目p的属性文法;文法规则语义规则Sf (T)S . p = T.p + 1S - iS . p = 0Tf,$T.p = T.p + S.pT -ST.p = S.p(2)请写出关于括号嵌套层数的属性文法。文法规则语义规则S一 (T)S=T.g + 1Sf iS . e = 0T T,$If ( TA .eS.e ) T.e = TAe; Else T.e = S.eTf ST . e = S .B8.2将下列程序段翻译成四元式序列 If cy do z: =x+l elsex: =y 翻译结果如下: 100 if y goto 104 103 goto 107 104 tl:=x+l 105 z:=tl 106 goto 102 107 goto 110 108 t2:=y 109 x:=t2