- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机]compiler11_目标代码生成
第十一章 代码生成 代码生成要考虑的主要问题 基本块的代码生成(在一个基本块范围内考虑如何充分利用寄存器的问题) 从dag生成代码 目标机器的地址方式 例1:a:=b+c 1. MOV b, R0 ADD c, R0 cost=6 MOV R0, a 2. MOV b, a ADD c, a cost=6 假定R0, R1和R2中分别存放了a, b和c的地址, 采用: 3. MOV *R1, *R0 ADD *R2, *R0 cost=2 假定R1和R2中分别包含b和c的值, 并且b的值在这个赋值以后不再需要, 则还可有 4. ADD R2, R1 MOV R1, a cost=3 例2: T4:=A+B-(E-(C+D)) MOV A,R0 ADD B,R0 MOV C,R1 ADD D,R1 MOV R0,T1 MOV E, R0 SUB R1,R0 MOV T1,R1 SUB R0,R1 MOV R1, T4 11.2 简单的代码生成器 (基本块内) 在一个基本块范围内考虑如何充分利用寄存器的问题: 尽可能地让该变量的值保留在寄存器中 尽可能引用变量在寄存器中的值 待用信息:若在一个基本块中,变量A在四元式i中被定值,在i后面的四元式j中要引用A值,且从i到j之间没有其它对A的定值点,这时我们称j是四元式i中对变量A的待用信息或称下次引用信息,同时也称A是活跃的,若A被多次引用则可构成待用信息链与活跃信息链。 可从基本块的出口由后向前扫描,对每个变量建立相应的待用信息链和活跃变量信息链。 d:=(a-b)+(a-c)+(a-c) t:=a-b u:=a-c v:=t+u d:=v+u 其中假定d在基本块的出口是活跃的。 代码序列 11. 3 从dag生成目标代码 MOV A,R0 ADD B,R0 MOV C,R1 ADD D,R1 MOV R0,T1 MOV E, R0 SUB R1,R0 MOV T1,R1 SUB R0,R1 MOV R1, T4 T2:=C+D MOV C,R0 T3:=E-T2 ADD D,R0 T1:= A+B MOV E,R1 T4:=T1-T3 SUB R0,R1 MOV A,R0 ADD B, R0 SUB R1,R0 MOV R0,T4 T4的计算紧跟在T1之后 尽可能使一个结点的求值紧接着它的最左变量的求值之后 启发式排序算法 (1) while存在未列入表的内部结点do (2) begin选取一个未列入表的但其全部父结点均已列 入表的结点n; (3) 将n列入表中; (4) while n的最左子结点m不是叶结点并且其所有 父结点均已列入表中do (5) begin将m列入表中; (6) n: =m (7) end (8) end 编译程序要求: 1. 概述: 源、目标语言 实现工具(平台) 运行平台 2. 结构设计说明 各功能模块描述 3. 主要成分描述 (1) 符号表 (2) 运行时存储组织和管理 (3) 语法分析方法 (4) 中间代码表示 4. 开发过程和完成情况 补充1:程序设计语言的计算模型 l????? 命令式或过程式语言 l????? 应用式(Applicative)或函数式 应用式语言:Lisp和ML 语法:function n(……function 2(function 1(data))……) 一个个函数应用在数据上的变换,最终得到一个结果。 l???? 基于规则(rule_based)的和面向对象的(object_oriented) 程序的执行式通过检查使能条件,决定执行一个适当的动作。如prolog,yacc 语法:使能条件1 →动作1 使能条件2
文档评论(0)