第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/5/19 20:50:12 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

第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)

第八章 语法制导翻译和中间代码生成.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c81wd412ham38gut0yjot_8.html(转载请注明文章来源)
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top