- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 中间代码生成 知识点:三地址代码 语句的翻译 布尔表达式的翻译 回填技术 中间代码生成 中间代码生成程序的任务 把语法分析、语义分析得到的源程序的中间表示翻译成中间代码表示 采用中间代码作为过渡的优点 便于编译程序的建立和移植 便于进行与机器无关的代码优化工作 缺点 增加了I/O操作、效率下降 中间代码生成程序的位置 中间代码生成 8.1 中间代码形式 8.2 赋值语句的翻译 8.3 布尔表达式的翻译 8.4 CASE语句的翻译 8.5 回填技术 8.6 过程调用语句的翻译 小 结 8.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的间接三元式表示 间接码表 三元式 8.2 赋值语句的翻译 假定赋值语句出现的环境可用下面的文法描述: P? M D;S M? ? D? D;D | D? id:T | D? proc id;N D;S N? ? T?integer| real | array [num] of T1 | ?T1 | record D end S? id:=E 翻译方案1 S?id:=E E?E1+E2 E?E1*E2 E?-E1 E?(E1) E?id 翻译方案2 (考虑类型) S?id:=E E?E1+E2 E?-E1 赋值语句 x:=y+i*j 假定x和y的类型为real,i和j的类型为integer 二、赋值语句中涉及数组元素的情况 二维数组A 每维的下界:low1、low2、...、lowk 每维的长度:n1、n2、...、nk 存储方式:按行存放 数组元素A[i1,i2,...,ik]的位置: ( (…( (i1?n2+i2)?n3+i3 )…)?nk+ik )?w + base - ( (…( (low1?n2+low2)?n3+low3 )…)?nk+lowk )?w 2.涉及数组元素的赋值语句 ——L属性定义 赋值语句的文法: (1) S?L:=E (2) E?E1+E2 (3) E?(E1) (4) E?L (5) L?id (6) L?id [ Elist ] (7) Elist?E (8) Elist?Elist1 , E 属性及函数设计 L 综合属性L.place和L.offset 简单变量: L.offset=null L.place=符号表入口指针 数组元素: L.offset=计算公式
文档评论(0)