- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理作业集—第七章 语义分析和中间代码产生
编译原理作业集—第七章 语义分析和中间代码产生
西安理工大学计算机科学与工程学院,张发存编写
西安理工大学计算机科学与工程学院,张发存编写 2018-8-7 , 19:46:49 - PAGE # -
第七章 语义分析和中间代码产生
本章要点
中间语言,各种常见中间语言形式;
说明语句、赋值语句、布尔表达式、控制语句等的翻译;
过程调用的处理;
类型检查;
本章目标
掌握和理解中间语言, 各种常见中间语言形式; 各种语句到中间语言的翻译; 以及类型检查
等内容。
本章重点
1 ?中间代码的几种形式,它们之间的相互转换:四元式、三元式、逆波兰表示;
3?赋值语句、算术表达式、布尔表达式的翻译及其中间代码格式;
4 ?各种控制流语句的翻译及其中间代码格式;
5?过程调用的中间代码格式;
类型检查;
本章难点
各种语句的翻译;
类型系统和类型检查;
作业题
、单项选择题:
布尔表达式计算时可以采用某种优化措施, 比如A and B用if-then-else可解释为
a. if A then true else B ; b. if A then B else false ;
c. if A then false else true ; d. if A then true else false ;
为了便于优化处理,三地址代码可以表示成 。
a.三元式 b.四元式 c.后缀式 d.间接三元式
使用三元式是为了 :
a.便于代码优化处理 b.避免把临时变量填入符号表
c.节省存储代码的空间 d.提高访问代码的速度
表达式-a+b*(-c+d)的逆波兰式是 。
a. ab+-cd+-* ; b. a-b+c-d+* ; c. a-b+c-d+* ; d. a-bc-d+*+ ;
赋值语句x:=-(a+b)/(c-d)-(a+b*c)的逆波兰式表示是 。
a. xab+cd-/-bc*a+-:= ; a. xab+/cd-bc*a+--:= ; a. xab+-cd-/abc*+-:= ; a. xab+cd-/abc*+--:=;
在一棵语法树中结点的继承属性和综合属性之间的相互依赖关系可以由 来描
述。
a.抽象语法树;b.语法规则;c.依赖图;d.三地址代码;
按照教材中的约定,三地址语句 if x relop y then L表示成四元式为 。
a. (relop,x, y, L) ; b. (relop, L,x,y) ; c. (relop,x, L,y) ; d. (L,x, y, relop);
在编译程序中, 不是常见的中间语言形式。
a波兰式;b.三元式;c.四元式;d.抽象语法树;
在编译程序中安排中间代码生成的目的是 。
a.便于提高编译效率; b.便于提高分析的正确性;
c.便于代码优化和目标程序的移植; d.便于提高编译速度;
按照教材中的约定,下面 不是类型表达式:
a. boolean; b. type-error ; c. real ; d. DAG ;
一个 Pascal 函数
function f ( a, b:char ) : 1in teger;
其作用域类型是 :
a. charx integer; b. charx char; c. charx pointer(integer) ; d. integer x integer;
因为标识符可用于多种情况,比如常量标识符、变量标识符、过程标识符等等。因此,
在符号表中为了给出各个符号的标志, 常给标识符引入一个属性 kind ,然后在相应产生式的
语义动作中添加给 kind属性赋值的语句。比如,在在产生式 D id:T的语义动作中添加赋
值语句 id.kind= 。
a. VAR ; b. CONSTANT ; c. PROC; d. FUNC ;
下面 情况下,编译器需要创建一张新的符号表。
a.过程调用语句;b.标号说明语句;c.数组说明语句;d.记录说明语句;
函数 function f(a,b:char): f integer; …
所以f函数的类型表达式为:
a. charx char^pointer(integer) ; b. charx char^pointer;
c. charx char^integer; d. charx char^integer (pointer)
如果一个语言的编译器能保证编译通过的程序,在运行时不会出现类型错误,则称该语
a.静态的;b.强类型的;c.动态的;d.良类型的;
一.答案:1. b
;2. d ; 3. b
;4. d
;5. c; 6. c.; 7. a; 8. a; 9. c; 10. d
;11. b
;12. a; 13.
原创力文档


文档评论(0)