- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译程序构造可以划分为便于控制和管理的阶段-read
第一章 绪 论 为什么学习编译原理 本课程的主要研究内容 编译过程概述 编译程序的生成 为什么学习编译 编译程序构造正确地建立了研究的问题领域和研究方式:分析输入内容、构造一个语义表示并合成输出。 编译程序构造可以划分为便于控制和管理的阶段,每个阶段的工作结果正好对应编译程序的子系统或模块。编译程序的这种分析—合成模式已经成为软件开发领域成功的设计模式和软件架构,在软件开发中获得了广泛的应用。 为什么学习编译 针对编译程序构造的某些部分已经开发了标准的形式化技术,这些技术包括有限自动机理论、上下文无关文法、正规表达式、属性文法、机器代码描述、数据流分析方程式等。依据这些形式化技术可以研制相关的自动生成工具,简化编译器构造工作,并可用于其他的软件开发领域,如数据库程序的自动生成器、从UML自动生成高级语言的程序。 为什么学习编译 编译程序包含许多普遍使用的数据结构和算法,例如哈希算法、栈机制、堆机制、垃圾收集、集合算法、表驱动算法、图等。 编译程序的构造技术也被很多应用程序所应用。如读入格式化的数据、文件转换问题等。例如快速创建HTML、XML、UML等文件的读入和分析程序。 为什么学习编译 有助于理解程序设计语言,以编写出优秀的软件。 本课程的主要研究内容 文法和语言 词法分析 语法分析 语义分析 代码优化 代码生成 编译过程概述 1、词法分析 一般也称为扫描程序(s c a n n e r)。 在这个阶段编译器实际阅读源程序(通常以字符流 的形式表示)。扫描程序执行词法分析,它将字符序 列收集到称作记号(t o k e n)的有意义单元中, 记号同自然语言,与英语中的单词相似。 2、语法分析 在词法分析基础上,根据语言的语法规则,把记号 构成的符号串分解成各类语法单位,如“短语”、 “句子”、“程序段”、“程序”等。通过语法分 析,确定整个输入串是否构成语法上正确的程序。 语法分析也定义了程序的结构元素及其关系,通常 将语法分析的结果表示为分析树(parse tree)或 语法树(syntax tree)。 3、语义分析与中间代码的生成 对语法分析所识别出的各类语法范畴,分析其 含义,并进行初步翻译,产生中间代码。 1、对每种语法范畴进行静态语义检查。 2、翻译成中间代码。 4、代码优化 其主要任务是对中间代码进行等价的加工变 换,以期产生更高效的目标代码。 优化的主要方法有常量合并、公共子表达式提 取、循环优化等。 5、目标代码生成 把经过优化处理后的中间代码变换成特定机器 上的低级语言代码。这个阶段实现了最后的翻 译,它的工作有赖于硬件系统结构和机器指令 的含义。 目标代码的优化工作比较复杂,涉及到硬件系 统功能部件的运用、机器指令的选择、各种数 据类型变量的存储空间分配、以及寄存器的调 度等。 编译程序的生成 直接用机器语言编写编译程序 用汇编语言编写编译程序 注:编译程序核心部分常用汇编语言编写 用高级语言编写编译程序 注:这是普遍采用的方法 自编译 编译工具移植 举例 参考书籍 陈意云 张昱 编译原理 高等教育出版社 吕映芝 计算机编译原理 清华大学出版社 陈火旺 刘春林等 程序设计语言编译原理 国防工业出版社 [美]Andrew W. Appel 现代编译原理(C语言描述) 人民邮电出版社 * * 为什么要用编译器呢? 1、识别出句子中的单词。 词法分析 2、分析句子的语法结构。 语法分析 3、根据句子的含义进行初步翻译。 语义分析与中间代码生成 4、对译文进行修饰。 代码优化 5、写出最后的译文。 目标代码优化与生成 词法分析器 语法分析器 语义分析器 源程序 中间代码生成器 代码优化器 代码生成器 目标程序 出错管理器 符号表管理器 编译器的各个阶段 源程序 词法分析 记号 记号 语法分析 分析树或语法树 词法分析器 语法分析器 语义分析器 源程序 中间代码生成器 代码优化器 代码生成器 目标程序 出错管理器 符号表管理器 编译器的各个阶段 单词符号(token) 语法树(syntax tree) 中间代码(IR) 中间代码(IR) 词法分析器 id1 := id2 + id3 * 60 position := initial + rate * 60 词法记号流 (1)标识符(position) (2)赋值号(:=) (3)标识符(initial) (4)加号(+) (5)标识符(rate) (6)乘号(*) (7)数(60) 任何一个标识符都是表达式; 任何一个数都是表达式; 如果e1和e2都是表达式,那么 ? e1 + e2 ? e1
文档评论(0)