- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
编编译译原原理理作作业业集集-第第七七章章((精精选选.))
第七章语义分析和中间代码产⽣
本章要点
1.中间语⾔,各常见中间语⾔形式;
2.说明语句、赋值语句、布尔表达式、控制语句等的翻译;
3.过程调⽤的处理;
4.类型检查;
本章⽬标
掌握和理解中间语⾔,各常见中间语⾔形式;各语句到中间语⾔的翻译;以及类型检查等内容。
本章重点
1.中间代码的⼏形式,它们之间的相互转换:四元式、三元式、逆波兰表⽰;
3.赋值语句、算术表达式、布尔表达式的翻译及其中间代码格式;
4.各控制流语句的翻译及其中间代码格式;
5.过程调⽤的中间代码格式;
6.类型检查;
本章难点
1.各语句的翻译;
2.类型系统和类型检查;
作业题
⼀、单项选择题:
1.布尔表达式计算时可以采⽤某优化措施,⽐如AandB⽤if-then-else可解释为_______。
a.ifAthentrueelseB;
b.ifAthenBelsefalse;
c.ifAthenfalseelsetrue;
d.ifAthentrueelsefalse;
2.为了便于优化处理,三地址代码可以表⽰成________。
a.三元式
b.四元式
c.后缀式
d.间接三元式
3.使⽤三元式是为了________:
a.便于代码优化处理
b.避免把临时变量填⼊符号表
c.节省存储代码的空间
d.提⾼访问代码的速度
4.表达式-a+b*(-c+d)的逆波兰式是________。
a.ab+-cd+-*;
b.a-b+c-d+*;
c.a-b+c-d+*;
d.a-bc-d+*+;
5.赋值语句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*+--=;
6.在⼀棵语法树中结点的继承属性和综合属性之间的相互依赖关系可以由________来描述。
a.抽象语法树;
b.语法规则;
c.依赖图;
d.三地址代码;
7.按照教材中的约定,三地址语句ifxrelopythenL表⽰成四元式为。
a.(relop,x,y,L);
b.(relop,L,x,y);
c.(relop,x,L,y);
d.(L,x,y,relop);
8.在编译程序中,不是常见的中间语⾔形式。
a.波兰式;
b.三元式;
c.四元式;
d.抽象语法树;
9.在编译程序中安排中间代码⽣成的⽬的是________。
a.便于提⾼编译效率;
b.便于提⾼分析的正确性;
c.便于代码优化和⽬标程序的移植;
d.便于提⾼编译速度;
10.按照教材中的约定,下⾯不是类型表达式:
a.boolean;
b.type-error;
c.real;
d.DAG;
11.⼀个Pascal函数
functionf(a,bchar)↑integer;
……
其作⽤域类型是:
a.char×integer;
b.char×char;
c.char×pointer(integer);
d.integer×integer;
12.因为标识符可⽤于多情况,⽐如常量标识符、变量标识符、过程标识符等等。因此,在符号表中为了给出各个符号的标
志,常给标识符引⼊⼀个属性kind,然后在相应产⽣式的语义动作中添加给kind属性赋值的语句。⽐如,在在产⽣式DidT的
语义动作中添加赋值语句id.kind=。
a.VAR;
b.CONSTANT;
c.PROC;
d.FUNC;
13.下⾯情况下,编译器需要创建⼀张新的符号表。
a.过程调⽤语句;
b.标号说明语句;
c.数组说明语句;
d.记录说明语句;
14.函数functionf(a,bchar)↑integer;…
所以f函数的类型表达式为:
a.char×char→pointer(integer);
b.char×char→pointer;
c.char×char→integer;
d.char×char→integer(pointer)
15.如果⼀个语⾔的编译器能保证编译通过的程序,在运⾏时不会出现类型错误
文档评论(0)