编译原理及编译程序构造汇.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文档。上传文档
查看更多
编译原理及编译程序构造汇

编译原理及编译程序构造 第一章 引论 一、程序设计语言 第一章 引论 二、程序设计语言的转换与编译 第一章 引论 二、程序设计语言的转换与编译 解释 以源程序作为输入,不产生目标程序,一边解释一边执行。 优点:直观易懂,结构简单,易于实现人机对话 缺点:效率低 第一章 引论 二、程序设计语言的转换与编译 编译 由高级语言转换为低级语言,然后对编译出来的目标程序进行运行计算 第一章 引论 二、程序设计语言的转换与编译 编译的转换过程 两阶段转换:编译——运行 第一章 引论 二、程序设计语言的转换与编译 编译的转换过程 三个阶段的转换:编译——汇编——运行 第一章 引论 三、编译程序 编译程序的工作 从输入源程序开始到输出目标程序为止的整个过程。可分为五个阶段:词法分析、语法分析、中间代码生成、优化和目标代码生成 注:也可加入语义分析。 第一章 引论 三、编译程序 1.词法分析 任务 输入源程序,对构成源程序的字符串进行扫描和分解,依照词法规则,识别出一个个的单词,并转化为机器易于使用的内码形式。 单词 是高级语言中有实在意义的最小语法单位,它由字符构成。 第一章 引论 三、编译程序 1.词法分析 注:1)一般内码可用二元式(类号、内码)表示。对于标识符与常数是由用户任意使用的,数目无限,解决办法是给标识符分配一个类号,不同的标识符用它的符号表入口地址(或变量地址)来区分,将这些地址当作内码给出。 2)描述词法规则的有效工具是正规式和有限自动机 第一章 引论 三、编译程序 2.语法分析 任务: 1)组词成句——在词法分析的基础上,根据语言的语法规则或文法,把单词符号组成各类的语法单位,如:短语、子句、语句、过程、程序。 2)通过语法分解,确定整个输入串是否构成语法上正确的句子、程序等。 语法规则的表示:BNF Word::={?} 注:语法分析对说明语句的处理是要填符号表,而对一般语句处理规则是构造语法树。 语法分析方法:推导(derive)和归约(reduce) 推导:从文法的开始符号开始,按照语法规则,每次选择某规则右部的一个候选式取代左部,直至识别了语句或者找到错误为止。其过程可用语法树描述 归约:按照语法规则,每次选择某规则左部取代右部的一个候选式 注:语法=词法规则+语法规则 语法树 第一章 引论 三、编译程序 3.中间代码生成 任务 在语法分析正确的基础上,按照相应语义规则,产生介于源代码和目标代码之间的一种代码。 注:这种中间代码不依赖于机器,但又便于产生依赖于机器的目标代码。 两阶段工作 对每种语法范畴进行静态语义检查 若语义正确,就进行中间代码的翻译 中间代码形式 四元式、三元式、逆波兰式 注:1)中间代码是为后续的优化和目标代码生成提供方便,因此中间代码的选择往往与所采用的优化技术和计算机硬件结构有关。2)用得最广的是四元式。 第一章 引论 三、编译程序 4.优化 任务 对产生的中间代码进行加工变换,以期在最后阶段能产生更为高效(省时间、省空间)的目标代码 依据原则:程序的等价变换规则 主要优化内容 删除公共子表达式、合并已知量、删除无用赋值语句、循环优化等 第一章 引论 三、编译程序 5.目标代码生成 任务:把中间代码程序转化成具体机器的指令序列 注:转换过程需涉及具体机器的指令系统以及寄存器分配等硬件功能。 第一章 引论 三、编译程序 6.表格与表格管理 表格作用: 用于记录源程序的各种信息以及编译过程中的各种状况,以便后续阶段使用。 与编译前三阶段有关的表格有: 符号表、常数表、标号表、分程序入口表、中间代码表等。 注:在编译过程中,随着源程序的不断被改造,编译的各阶段常常需要不同的表格,编译过程的绝大多数时间是花在查表、造表和更新表格的事务上。在大多数的编译程序中,表格专门由表格管理程序来处理。 符号表:用来登记源程序中的常量名、变量名、数组名、过程名等的性质、定义和引用状况。 入口名表:登记过程的层号,分程序符号表的入口(指分程序结构的语言)等 中间代码表:记录四元式序列的表 第一章 引论 三、编译程序 7.出错处理 任务 如果源程序有错误,编译程序应设法发现错误,并报告给用户。 注:查错无形式化的办法解决。 完成:由专门的出错处理程序来完成 错误类型: 语法错误:在词法分析和语法分析阶段检测出来。 语义错误:一般在语义分析阶段检测。 第一章 引论 三、编译程序 8. 遍 遍:指对源程序或源程序的中间结果从头到尾扫描一次,并做有关的加工处理,生成新的中间结果或目标代码的过程。 注:遍与阶段的含义毫无关系。 多遍扫描的好处 节省内存空间,提高目标代码质量,使编译的逻辑结构清晰。 多遍扫描的缺点

文档评论(0)

liwenhua11 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档