- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译第一章new.ppt
目标代码生成:编译的最后阶段 把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码,它的工作与硬件系统和指令含义有关,这个阶段的工作很复杂,涉及到硬件系统功能部件的运用、机器指令的选择、各种数据类型变量的存储空间分配以及寄存器和后续缓存器的调度等。 例如使用两个寄存器R1和R2,可将图1.8所示的中间代码生成如图1.9的某种汇编代码 MOV id3 , R2 MUL #10.0 , R2 MOV id2 , R1 ADD R1 , R2 MOV R1 , id1 图1.9 目标代码 第1条指令将id3的内容送至寄存器R2; 第2条指令将其与实常数10.0相乘,#表明把10.0处理为常数; 第3条指令将id2移至寄存器R1; 第4条指令将R1和R2中的值相加; 第5条指令将寄存器R1的值移到id1的地址中。 这些代码实现了本节开头给的源程序片段的赋值。 1.2.2 编译程序的结构 上述编译过程的六个阶段的任务,再加上表格管理和出错处理的工作可分别由几个模块或程序完成,它们分别称作词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、表格管理程序和出错处理程序。从而可以给出一个典型的编译程序结构框图,如图1.10所示。 源程序 词法分析程序 语法分析程序 语义分析 中间代码生成程序 代码优化程序 目标代码生成程序 目标程序 表 格 管 理 程 序 出 错 处 理 程 序 语义分析程序 图1.10 编译程序结构框图 符号表管理 记录源程序中使用的名字 收集每个名字的各种属性信息 出错处理 检查错误、报告出错信息、排错、恢复编译工作 1.2.3 编译阶段的组合 在前面讨论的编译过程中阶段的划分是编译程序的逻辑组织。有时,常常把编译的过程分为前端 front end 和后端 back end 。 前端:由主要依赖于源语言而与目标机无关的阶段组成。通常这些阶段包括词法分析,语法分析,语义分析,中间代码生成,某些优化工作也可以在前端做,也包括与前端每个阶段相关的出错和表格管理程序 后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和表格管理程序。 遍:对源程序或源程序的中间表示形式从头到尾扫描一次,生成新的中间结果或目标程序。每一遍扫描可以完成上述一个阶段或多个阶段的工作。 相同的前端,不同的后端,可为不同的机器生成构造同一个语言的编译程序。 不同的前端,相同的后端,可为同一机器生成几个语言的编译程序。 一个编译过程可由一趟或多趟完成。 多趟完成占内存少,逻辑结构清晰但消耗时间多,速度慢。 编译程序和解释程序 编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器的汇编或二进制代码程序,这个二进制代码程序在机器上运行以生成结果。因此通过编译程序使得我们可以先准备好一个在该机器上运行的程序,然后这个程序便会以机器的速度运行。但是在不把整个程序全部都翻译结束之后,这个程序是不能开始运行,也不能产生任何结果的。编译和运行是两个独立分开的阶段。 但在一个交互环境中,不需要将这两个阶段分隔开,编译就不如解释的方法更方便。另一种语言处理程序,解释程序,它不需要在运行前先把源程序翻译成目标代码,也可以让我们实现在某台机器上运行程序并生成结果。 解释程序 是这样一个程序,它接受某个语言的程序并立即运行这个源程序。它的工作模式是一个个地获取,分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果。 它特别适合程序员交互方式的工作情况,即希望在获取下一个语句之前了解每个语句的执行结果,允许执行时修改程序。 著名的解释程序有Basic语言解释程序 ,Lisp语言解释程序,UNIX命令语言解释程序 shell ,数据库查询语言SQL 解释程序以及Java语言环境中的bytecode解释程序。 高级语言解释系统 interpreter 图1.11示意了解释程序的功能,图1.12示意了编译程序和解释程序的不同工作模式。 功能 让计算机执行高级语言(basic,lisp,prolog 与编译程序的不同 1)不生成目标代码 2)能支持交互环境 (同增量式编译系统) 源 程 序 初始数据 解释程序 计算结果 图1.11 解释程序的功能 解释系统 直接对源程序中的语句进行分析,执行其隐含的操作。 如:… … b : 2 ; a : b+2 ; 编译程序 write a ; … … 解释程序直接将4的值输出(显示) Int 2 St b Ld b add 2 St a 生成代码 图1.12 编译
您可能关注的文档
最近下载
- 思想政治学科教学新论七章 思想政治学科评价论.ppt VIP
- 2025江西南昌青山湖区城市管理和综合执法局招聘工作人员10人笔试参考题库附答案解析.docx VIP
- 04S519:小型排水构筑物.pdf VIP
- GB50017钢结构设计规范.pdf VIP
- 武汉文化投资发展集团有限公司招聘5名工作人员笔试备考试题及答案解析.docx VIP
- 2023全钒液流电池可靠性评价方法.pdf VIP
- [乐高LEGO 9686动力机械]第14课 摩天轮.pdf VIP
- 英语视听说4英语视听说IV教学大纲.pdf VIP
- 基根-《全球营销(第8版)》英文教辅-第4章.pptx VIP
- 基根-《全球营销(第8版)》英文教辅-第3章.pptx VIP
文档评论(0)