- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
编译程序最后一个阶段是目标代码生成。它通常在语义分析后或者优化后的中间代码上进行,并将中间代码转化为等价的目标代码。
本章主要介绍
简单代码生成器的设计和构造方法
;编译程序的最终目的是将源程序翻译成等价的目标程序,为了达到此目的,编译程序除了对源程序进行词法分析、语法分析和语义分析外,还必需将语义分析后或者优化后的中间代码转换为等价的目标代码。
;一.目标代码生成的任务
;代码生成器的输入除中间代码外还包括符号表中的信息,生成的目标代码一般有如下三种形式
1.能够立即执行的机器语言代码,它们通常存放在固定的存储区中,编译后可直接执行。
2.待装配的机器语言模块,当需要执行时,由连接装配程序把它们与另外一些运行子程序连接起来,组合成可执行的机器语言代码。
3.汇编语言程序,必须通过汇编程序汇编成可执行的机器语言代码。
;二.设计代码生成器时要着重考虑目标代码的质量
衡量目标代码的质量
1.存储空间:生成的目标代码短。
2.执行效率:充分利用寄存器,减少访问存储单元的次数。
;具体设计一个代码生成器需要考虑机器结构、系统指令格式等方面的问题。由于计算机体系结构和操作系统的多样性,我们在这里不做具体介绍,仅仅以一个假想的计算机模型为例,简单讨论代码生成的基本原理。
;简单代码生成器功能
依次把四元式变换成目标代码,并在一个基本块内考虑如何充分利用寄存器。
在设计代码生成器时,为考虑充分利用寄存器,我们须要考虑下面两点:
;1.给出寄存器的分配原则
(1)把基本块内还要使用的变量的值尽可能地保存在寄存器中;
(2)在基本块内,把不再使用的变量所占用的寄存器及时释放掉;
(3)当到基本块出口时,将变量的值存放在内存中。
;当翻译一个四元式如A=BopC时,我们需要知道在基本块中还有哪些四元式要对变量A、B、C进行引用。
2.建立每个变量的待用信息和活跃信息
(1)待用信息
;例?
(i)A=T1
?
(j)T2=AOPX
(j)为四元式(i)变量A的待用信息
;(2)活跃变量
基本块中所有的非临时变量均看作基本块出口之后的活跃变量,临时变量根据其在基本块出口之后是否被引用来确定它是否为活跃变量。
;(3)计算变量待用信息和活跃信息的算法:
输入:基本块及其入口语句号和出口语句号
输出:附加待用信息和活跃信息的基本块;算法的步骤
假设变量的符号表内有待用信息和活跃信息栏
(1)将符号表中每个变量的待用信息栏初始化为“非待用”,对活跃信息栏则根据该变量在基本块出口之后是否活跃,将该栏中的信息置为“活跃”或“非活跃”。
;(2)从基本块出口到基本块入口由后向前依次处理各四元式。对每个四元式i:A=BopC,依次执行如下骤
①把符号表中变量A的待用信息和活跃信息附加到四元式i上;
②把符号表中变量A的待用信息栏和活跃信息栏分别置为“非待用”和“非活跃”;
;③把符号表中变量B和C的待用信息和活跃信息附加到四元式i上;
④把符号表中B和C的待用信息置为i,活跃信息置为“活跃”。
注意,以上①、②、③、④次序不能颠倒。
;;待用信息和活跃信息在四元式上的标记如下:
;在代码生成中进行寄存器分配,我们需随时掌握各寄存器的使用情况
3.建立寄存器描述数组RVALUE,动态地记录各寄存器的分配状况
;4.建立变量地址描述数组AVALUE,动态地记录各变量现行值的存放位置
; 有了上述对寄存器和地址的描述,我们可以给出一个简单代码生成算法。
;调用函数GETREG(i:A=BopC)
得到存放A的现行值的寄存器R;; 现阶段代码生成器的自动生成器主要采用由形式描述进行驱动的技术,这种技术把目标机的每条指令的形式描述作为输入,将表示计算的中间语言代码与这种描述进行匹配来产生相应的指令。
; 形式描述技术的主要优点是:把实现者从选择计算给定构造的代码中解放出来,实现者只需要以形式化描述每条目标指令的精确意义,生成器将自动地查询机器描述,找出为完成所需的计算的指令或指令串。
;1.目标代码生成的任务
代码生成一般是在语法分析后的中间代码级上进行,其功能是将中间代码转换为目标代码。
;2.目标代码的形式
;3.目标代码生成需要考虑的基本问题
;4.待用信息和活跃信息的概念
;(2)活跃变量
基本块中所有的非临时变量均看作基本块出口之后的活跃变量,临时变量根据其在基本块出口之后是否被引用来确定它是否为活跃变量。
您可能关注的文档
- 编译原理(第5版)-课件(更新) 2025 第10章并行编译技术基本常识.pptx
- 编译原理(第5版)-课件(更新) 2025第8章 目标程序运行时的存储组织 .pptx
- 编译原理(第5版)-课件(更新)2025 第1章 编译概述.pptx
- 编译原理(第5版)-课件(更新)2025第2章 文法和语言的基本知识.pptx
- 编译原理(第5版)-课件(更新)2025第3章 词法分析与有穷自动机.pptx
- 编译原理(第5版)-课件(更新)2025第4章 语法分析 .pptx
- 编译原理(第5版)-课件(更新)2025第5章 语法制导翻译技术 中间代码生成 .pptx
- 编译原理(第5版)-课件(更新)2025第6章 符号表的组织与管理 .pptx
- 编译原理(第5版)-课件(更新)2025第7章代码优化 .pptx
- 《失智老年人照护》模块 5:异常行为的处理——技能 17 重复行为应对(SZ-17).pptx
文档评论(0)