课程说明教学课件.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目标代码的形式可以是绝对指令代码、可重定位的机器指令代码或汇编指令代码 如果目标是绝对指令代码,则可立即执行 如果是汇编指令代码,还需经汇编程序翻译后才能运行 现在多数编译程序产生的是可重定位的机器指令代码,这种目标代码在运行前必须借助于一个连接装配程序把各个目标模块(包括系统提供的库模块)连接在一起,确定程序中的变量在内存中的位置,装入内存中指定起始地址,使之成为一个可以运行的绝对指令代码程序 什么是链接器(Linker) 链接器的功能是,将一个或多个由编译器生成的目标文件及库链接为一个可执行文件。 注意! 上述编译过程的5个阶段是一种典型的分法,并非所有的编译程序都分成5个阶段 本书中PL/0语言的编译程序省略了优化阶段;同时省去了最后的目标代码生成阶段,取而代之的是增加一个解释程序,由解释程序来解释执行中间代码程序,同样可以得到最终结果 编译和解释 解释程序:在解释程序的执行过程中不产生目标代码。每读一条源程序代码,就将它解释成等价的若干条机器代码,并执行之。一些规模较小的语言,如BASIC,常采用此方式。 通常把编译和解释作某种程度的结合。如Java,先将源程序由java编译器(javac)编译生成字节码(bytecode)文件,然后由一个虚拟机对得到的字节码加以解释执行(java)。 注:字节码文件是与平台无关的二进制码。 PL/0编译程序也采用了编译和解释相结合的方式 6.符号表管理 编译过程中要记录源程序中出现的标识符,并收集每个标识符的各种属性信息。为此需要建立一个符号表记录有关标识符的各种信息。 符号表是由若干记录组成的数据结构,每个标识符在表中有一条记录,每条记录有多个域,每个域记载标识符的一个属性。 符号表的设计在很大程度上说它是一种艺术比说它是科学原理更合适:符号表的属性随语言的不同而变化,全局符号表最重要的是接口和性能,等等 7.出错处理 编译的各个阶段都可能发现源程序中的错误。发现错误后如果立即停止编译,往往会降低调试程序的效率,所以应对出现的错误做适当的处理,从而使编译能继续进行。 词法分析可以检测出源程序中的非法符号,就好比自然语言语句中的出现的错字、错词。语法分析能够发现程序语句中的各种语法错误,如括号不匹配等等。语义分析能判断运算对象的类型是否匹配、变量是否重复声明或没声明就使用等错误。 任意时刻发现错误,都应该报告错误信息,包括错误出现的位置、错误性质等,为程序员调试程序提供方便。由此可见,错误检测和恢复也是编译程序中的一项重要工作。 3. 编译程序的结构 在设计和实现编译程序时,要考虑编译程序分“遍”的问题。 所谓一“遍”是指在编译时把源程序或者中间形式从头到尾扫描一遍,并作相关处理,生成新的中间形式或目标代码 采用不同的分遍方式,编译程序的结构也有所不同 单遍编译程序 单遍编译程序只对源程序进行一遍扫描,就完成编译的各项任务,产生目标代码。在单遍编译程序中,往往以语法分析程序为中心,词法分析和语义分析作为语法分析的子程序。其工作过程如下: 当语法分析需要读进一个新单词时,就调用词法分析子程序。词法分析子程序则从源程序中依次读入字符,组合成单词符号,并将单词符号返回给语法分析程序。 当语法分析程序识别出一个语法成分时,就调用语义分析子程序进行语义分析,并生成目标程序。 当源程序处理完后,进行善后处理,优化目标程序。 词法分析 语法分析 语义分析生成 目标程序 S.P. 语法成分 返回分析结果 整理目标程序 停机 O.P. 取单词 返回单词 单遍编译程序 多遍编译程序 有的编译程序把编译程序的五项任务分几遍来进行,每遍只完成部分任务, 多遍编译程序的工作过程如下: 调用词法分析程序将高级语言源程序转换成用单词符号表示的程序,即将字符串程序转换成单词符号串源程序。 调用语法分析程序对符号串源程序进行语法归类检查。 调用语义分析程序进行语义检查,并生成中间的代码程序。 调用代码优化程序对中间代码程序进行优化。 调用目标生成程序将优化后的中间代码程序转换成目标代码程序。 源程序 词法分析 语法分析 语义分析 代码优化 目标代码生成 错误处理 符号表 目标程序 多遍编译程序结构 实际上,根据语言的不同,编译器可以是一遍(one pass)——所有的阶段由一遍完成,其结果是编译得很好,但(通常)代码却不太有效。 大多数带有优化的编译器都需要超过一遍:典型的安排是将一遍用于扫描和分析,将另一遍用于语义分析和源代码层优化,第3遍用于代码生成和目标层的优化。 更深层的优化则可能需要更多的遍: 5遍、6遍、甚至8遍都是可能的。 试问世界上第一个编

文档评论(0)

189****8659 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档