- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理 主讲:马慧芳 2013.9-2014.1 为什么学习编译(1) 编译程序构造的原理和技术一直属于计算机科学必备的专业基础知识。 是计算机科学中一个非常成功的分支,也是最早获得成功的分支之一。 它所建立的理论、技术和方法值得深入研究和学习。 编译构造正确地建立了研究的问题领域和研究方式。 为什么学习编译(2) 针对编译程序构造的某些部分已经开发了标准的形式化技术,包括有限自动机理论、上下文无关文法、正规表达式、属性文法、机器代码描述、数据流分析方程式等。 编译程序包含许多普遍使用的数据结构和算法,例如散列法(哈希算法)、栈机制、堆机制、垃圾收集、集合算法、表驱动算法。 编译程序的许多构造技术已经得到了广泛的应用。 学习编译原理和技术还有助于我们理解程序设计语言,编写优秀的软件。 本课程的目的 构造编译器基本知识 编译的阶段和相关的活动 相关数据结构和算法 计算机科学中相关的基础理论 形式语言与自动机 进一步加深对软件开发的认识 说明 基于形式语言理论中的有关概念来讨论编译实现问题。即 编译原理=形式语言理论+编译技术 本书主要内容涉及: 高级程序设计语言 形式语言理论的基本概念 构造编译程序的基本概念、原理和技术 主要内容 总论(4h) 文法与语言(6h) 词法分析(12h) 语法分析(18h) 语义分析、中间代码生成与运行时存储分配 (4h) 优化和目标代码生成 (2h) 总结复习(2h) 第1章 总论 主要内容: 基本概念介绍 高级语言的翻译 编译程序的结构 编译程序的相关软件和开发工具 编译程序在计算机系统中的作用 编译系统是一种软件,一种系统软件。 软件:计算机系统中的程序及其文档。 系统软件:居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。和具体的应用领域无关,如编译系统和操作系统等。 语言处理系统:把软件语言书写的各种程序处理成可在计算机上执行的程序,如编译系统。 解释程序:接受所输入的用程序语言(源语言)编写的程序(源程序),然后直接解释执行源程序。相当于源程序的抽象执行机,是语 言的实现系统。 高级语言源程序 ? ? 计算结果 数据 ? 编译程序:源语言为高级语言,目标语言是低级语言(汇编或机器语言)的翻译程序。 解释程序与编译程序的特点 概念上的不同 基于解释执行的程序可以动态修改自身,而基于编译执行的程序则需要动态编译技术,难度较大。 基于解释方式有利于人机交互。 解释执行速度要慢。 编译产生的目标代码所占用的空间通常要比 解释方式多 编译程序的功能和组织结构 词法分析 词法分析的工作 它是编译程序的第一个阶段,主要任务是从左到右地对构成源程序的字符串进行扫描和分解,识别出一个个具有独立意义的单词 什么是单词 逻辑上相连的一组字符,从语法的角度来看,这些字符所具有的集体含义已不能再区分了,通常包括:保留字、标识符、界符、算符和常量等 考虑下面的一段源程序 var area, radius:real; begin read(radius); area:?3.1415926*radius*radius; end. 保留字: var, begin, end, read,real 运算符: *, :? 界符:‘(’,‘)’,‘; ’,‘.’ 标识符: radius, area 语法分析 语法分析的工作 语法分析是编译过程的第二阶段,其工作是在词法分析的基础上识别单词序列是否能组成其语法成分 例. 对赋值语句area:?3.1415926*radius*radius进行语法分析 赋值语句的语法树 语义分析和中间代码生成 语义分析和中间代码生成的工作 编译过程的第三阶段,审查源程序有无错误 语义分析的任务是检查程序语义的正确性,解释程序结构的含义。 检查变量是否有定义,变量在使用前是否具有值,数值是否溢出等,其中的一个重要部分是进行类型的检查和转换。 语义分析完成之后,编译程序通常就依据语言的语义规则、利用语法制导技术把源程序翻译成某种中间代码。 什么是中间代码 是将源程序转变成的一种内部表现形式,是一种结构简单、含义明确的记号系统 中间代码的两种性质 容易生成这种中间代码 容易将它翻译成目标代码 主要形式 四元式、三元式、间接三元式、逆波兰式等 代码优化 代码优化的工作 是对前阶段产生的中间代码进行变换或改造,相对减少目标代码的运行时间和空间 常用方法 删除公共子表达式 强度削弱 循环不变 目标代码生成 主要工作 是整个编译过程的最后一个阶段,这一阶段的工作是把中间代码变换成特定目标机器上的绝对指令代码或可重定向的指令代码或汇编指令代码 编译程序的两大部分
文档评论(0)