- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译程序设计原理与技术 中间代码生成 §7 中间代码生成 学时:6 知识点:三地址代码 语句的翻译(声明、赋值、CASE、调用语句) 布尔表达式的翻译 回填技术 §7 中间代码生成 中间代码生成器的任务 把语法分析、语义分析得到的源程序的中间表示翻译成中间代码表示 采用中间代码作为过渡的优点: 翻译时不必考虑目标语言的细节,使翻译容易实现 便于编译器的移植 便于进行与机器无关的代码优化工作 缺点: 增加了I/O操作、效率下降 中间代码生成器的位置: 本章主要内容 7.1 中间语言 7.2 声明语句的翻译 7.3 赋值语句的翻译 7.4 布尔表达式的翻译 7.5 CASE语句的翻译 7.6 回填技术 7.7 过程调用语句的翻译 小 结 作 业 7.1 中间语言 一、图形表示 语法树 dag图 二、三地址代码 三地址代码的形式 三地址代码的种类 三地址代码的具体实现 一、图形表示 语法树 描绘了源程序的自然层次结构 dag图 以更紧凑的方式给出了同样的信息 因为公共子表达式被标识出来了 为赋值语句产生语法树的语法制导定义 赋值语句a:=b*-c+b*-c的图表示法 语法树表示: 语法树的实现——存储结构 每一个结点用一个记录表示,该记录包括一个运算符号域和若干个指向其子结点的指针域 二、三地址代码 三地址代码: 三地址语句组成的序列 类似于汇编语言的代码 语句可以有标号 有控制流语句 三地址语句的一般形式: x:=y op z x 是名字、临时变量; op 代表运算符号,如定点、浮点、或逻辑算符等 y、z 是名字、常数、或临时变量 三地址代码的含义:每条语句通常包含三个地址,两个运算对象的地址和结果地址 三地址代码的种类 赋值语句: x:=y op z x:=op y x:=y 转移语句 goto L if x relop y goto L 过程调用语句 param x call p,n 赋值语句a:=b*-c+b*-c的三地址代码 语法树的代码 t1:=-c t2:=b*t1 t3:=-c t4:=b*t3 t5:=t2+t4 a:=t5 三地址代码的具体实现 四元式: (op,arg1,arg2,result) (op,arg1,-,result) (param,arg1,-,-) (goto,-,-,语句标号) 赋值语句a:=b*-c+b*-c的四元式表示: 三元式:(op,arg1,arg2) 为避免把临时变量名也存入符号表,可不引入临时变量 把由一个语句计算出来的中间结果直接提供给引用它的语句 用计算中间结果的语句的指针代替存放中间结果的临时变量 赋值语句a:=b*-c+b*-c的三元式表示: 语句x[i]:=y和x:=y[i]的三元式序列 语句 x[i]:=y 间接三元式 间接码表: 为三元式序列建立的一个指针数组 其每个元素依次指向三元式序列中的一项 赋值语句a:=b*-c+b*-c的间接三元式表示: 间接码表 三元式 7.2 声明语句的翻译 处理声明语句时,编译器的任务: 分离出每一个被声明的实体,并将它的名字填入符号表中; 尽可能多地将要保留在符号表中的有关该实体的信息填入符号表,并为名字分配存储空间。 声明语句的形式: 类型关键字的位置: 标识符表的前面 标识符表的后面 标识符表: 单一实体 多个同类型的实体 不同种类的实体 一、过程中的声明语句 假定: 最内层过程,不涉及过程和函数的申明 暂时不考虑记录结构的声明 声明语句的文法 P?D;S D?D;D D?id:T T?integer T?real T?array [num] of T1 T??T1 设计翻译方案的目的 识别出被声明实体 记录实体的名字、类型、在数据区中的相对位置 翻译方案1 P? D D?D;D D?id:T T?integer T?real T?array [num] of T1 T??T1 二、过程声明 作用域信息的保存 文法 P? D D? D;D D? id:T D? proc id; D;S T?integer T?real T?array [num] of T1 T??T1 数据结构及过程 记录符号表嵌套关系的、便于操作的结构: 栈 翻译方案2 P? M D M?? D? D;D D? id:T D? proc id;N D;S N?? 例子 三、记录声明的处理 文法 P? D D? D;D D? id:T D? proc id;D;S T? record
文档评论(0)