- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 常数表(Constant Table) 常数表用于记录在源程序中出现的常数。假定,每个整常数在常数表中占2个字节,每个实常数在常数表中占4个字节。 常数的二进制值 00000011(3) 01000000(128) …… 常数表的结构示意如下: * ㈣目标代码生成(Code Generation) 执行目标代码生成的程序称为目标代码生成器。 任务:中间代码 ? 目标代码(机器指令或汇编语言) 依据:目标机器的系统结构 假设模型机器的指令格式为: op Ri , M (Ri)op(M)→ Ri op Ri , Rj (Ri)op(Rj)→ Ri op Ri , C (Ri)op C → Ri 其中Ri表示寄存器,M表示内存地址(可用符号表示),C表示常数。 表达式3+abc*128最终形成的汇编语言程序示意如下: Load R0,abc Mul R0,128 Store R0,T1 Load R0,3 Add R0,T1 Store R0,T2 * 编译程序在工作过程中可发现源程序中各种错误,错误类型及错误处理对策简述如下: ㈠错误类型 词法错误(可在词法分析阶段发现) 语法错误(可在语法分析阶段发现) 语义错误(可在语义分析阶段发现) 1.4 出错处理(Error Handle) ㈡出错处理 一旦发现错误,暂停编译程序工作,指出错误的地点和类型。 在发现错误后,不中断编译程序工作。采取某些措施(例错误局部化、错误校正等),使得源程序的编译工作可继续下去,尽可能发现源程序中比较多的错误。 * 1.5 编译程序的前端和后端 由于在编译程序的内部引入了中间代码,这样可将编译程序分为二个相互独立部分。 ㈠编译程序前端(The Front End) 组成:词法分析器、语法分析器和中间代码产生器 特点:依赖于被编译的源语言,输出结果用中间代码描述,和目标机器无关。 ㈡编译程序后端(The Back End) 组成:目标代码生成器 特点:和源语言无关,以中间代码形式的源程序为输入进行处理,输出结果依赖于目标机器。 为一个源语言构造好前端,若要在某一个特定计算机上构造该源语言的编译程序,只要构造这个目标机器的后端即可。相反,若已构造了一个高质量的后端,若要在同一台目标机器上为另一源语言构造编译程序时,只要构造该源语言的前端即可。 * 1.6 编译程序的实现方式 ㈠用机器指令或汇编语言手工编写 传统方式,能充分发挥机器的硬件性能,但费时,工作量大。 ㈡用高级语言手工编写 利用已有的高级语言的编译系统,编写另一高级语言的全部或部分编译程序。 ㈢自编译方式 先用机器或汇编语言构造一个小的编译程序(称为核),然后以此为工具,构造出一个能编译更多语法成分的编译程序,像滚雪球一样逐步扩大(实质上是上述二种方式的综合)。 ㈣自动构造 ①词法分析器的自动构造 输入词法规则,编译结果为词法分析器,例LEX系统(Lexical Analyzer Generator) 。 ②语法分析器的自动构造 输入语法规则,编译结果为语法分析器,例YACC系统(Yet Another Compiler-Compiler)。 * 1.7 编译系统以及其它相关程序 编译系统 预处理器 源程序 编辑器 修改后的源程序 汇编程序 可重定位的目标程序 可执行的目标程序 函数库 可重定位的目标文件 连接器与加载器 特性器 调试器 解释器 配置与版本控制器 源程序 汇编器 编译器 源程序 * 1.7 编译系统以及其它相关程序 编辑器:程序员借助编辑器编写源程序,由编辑器产生出标准的正文文件(如ASCII文件)作为编译程序的输入。 预处理器:它是在编译程序真正开始翻译源程序之前调用的一个独立的程序,以便加快和简化翻译工作。 汇编器 :汇编器把汇编语言代码翻译成一个特定的机器指令序列。 连接器:搜集和组织程序所需要的不同代码和数据,把它们连接成可以执行的目标代码的工具。 * 1.7 编译系统以及其它相关程序 装载器:给程序在内存器中分配一个起始地址,载入目标机器,以便程序中的各个符号通过相对地址可以真实地访问存储器。 调试器 :用来确定编译过的程序在运行时的错误。 特性器: 这是搜集运行程序行为特征的统计数据的软件工具。 配置与版本控制器:管理和维护每个独立的源程序模块、编译模块、数据文件及其每个文件的修改历史信息包括模块连接、加载的信息等的工具。 * 结 束 * 为什么学习编译 编译程序构造的原理和技术一直属于计算机科学必备的
文档评论(0)