第八章 语法制导翻译和中间代码生成 联系客服

发布时间 : 星期二 文章第八章 语法制导翻译和中间代码生成更新完毕开始阅读ce62181b650e52ea5518982d

第8章 语法制导翻译和中间代码生成

课后习题

第8章 习题

第1题:

给出下面表达式的逆波兰表示(后缀式): (1)a*(-b+c)

(2) if(x+y)*z=0 then s∶=(a+b)*c else s∶=a*b*c

第2题:

请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。

第3题:

采用语法制导翻译思想,表达式E的\值\的描述如下: 产生式 语义动作

(0) S′→E {print E.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} 假如终结符n可以是整数或实数,算符+和*的运算对象类型一致,语义处理增加\类型匹配检查\,请给出相应的语义描述。

第4题:

请将下列语句

while (AD) then X:=Y+Z 翻译成四元式

第8章 语法制导翻译和中间代码生成

问答题答案

问答第1题

给出下面表达式的逆波兰表示(后缀式): (1) a*(-b+c) 答案:ab-c+*

(2) if(x+y)*z=0 then s∶=(a+b)*c else s∶=a*b*c

答案:xy+z*0=sab+c*:=sab*c*:=¥(注:¥表示if-then-else运算)

问答第2题

请将表达式-(a+b)*(c+d)-(a+b)分别表示成三元式、间接三元式和四元式序列。 答案:三元式 (1) (+ a, b) (2) (+ c, d) (3) (* (1), (2)) (4) (- (3), /) (5) (+ a, b) (6) (- (4), (5)) 间接三元式

间接三元式序列 间接码表 (1) (+ a, b) (1) (2) (+ c, d) (2) (3) (* (1), (2)) (3) (4) (- (3), /) (4) (5) (- (4), (1)) (1) (5) 四元式 (1) (+, a, b, t1) (2) (+, c, d, t2) (3) (*, t1, t2, t3) (4) (-, t3, /, t4) (5) (+, a, b, t5) (6) (-, t4, t5, t6)

问答第3题

采用语法制导翻译思想,表达式E的\值\的描述如下: 产生式 语义动作

(0) S′→E {print E.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}

假如终结符n可以是整数或实数,算符+和*的运算对象类型一致,语义处理增加\类型匹配检查\,请给出相应的语义描述。

第8章 语法制导翻译和中间代码生成

答案:

(0) S′→E { if error≠1 then print E.VAL}

(1) E→E1+E2 { if E1.TYPE=int AND E2.TYPE=int then begin

E.VAL:=E1.VAL + E2.VAL;

E.YTPE:=int; end

else if E1.TYPE=real AND E2.TYPE=real then begin

E.VAL:=E1.VAL + E2.VAL; E.YTPE:=real; end else error=1 }

(2) E→E1*E2 { if E1.TYPE=int AND E2.TYPE=int then begin

E.VAL:=E1.VAL * E2.VAL;; E.YTPE:=int; end

else if E.TYPE=real AND E.TYPE=real then begin

E.VAL:=E.VAL * E.VAL;; E.YTPE:=real; end else error=1

1

2

1

2

}

(3) E→(E1) { E.VAL:=E1.VAL; E.TYPE:=E1.TYPE } (4) E→n { E.VAL:=n.LEXVAL;

E.TYPE:=n.LEXTYPE } 第4题

请将下列语句

while (AD) then X:=Y+Z 翻译成四元式 答案:

假定翻译的四元式序列从(100)开始: (100) if A

第8章 语法制导翻译和中间代码生成

(107)