




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 编译原理于铁忠Mobil Mail yutiezhong tonyjohnyu 2 为什么要学习编译原理 程序设计语言是计算机软件专业的重要核心 通过学习编译原理可以更好地理解程序语言的内部机制 从而更好地理解和运用程序设计语言 编译程序构造的原理和技术一直属于计算机科学必备的专业基础知识 必修主干课程 操作系统和编译系统构成程序设计者与计算机之间的基本界面 是计算机科学中一个非常成功的分支 也是最早获得成功的分支之一 3 它的理论 技术和方法值得深入研究和学习编译构造正确地建立了研究的问题领域和研究方式 针对编译程序构造的某些部分已经开发了标准的形式化技术 包括有限自动机理论 上下文无关文法 正规表达式 属性文法 机器代码描述 数据流分析方程式等 编译程序包含许多普遍使用的数据结构和算法 例如哈希算法 栈机制 堆机制 垃圾收集 集合算法 表驱动算法等 编译程序的许多构造技术已经得到了广泛的应用 学习编译原理有助于我们理解程序设计语言 编写优秀的软件 为什么要学习编译原理 4 课程的性质和特点 性质是计算机专业的重要的专业基础课 被列入国际ACM91教程 本课程主要涉及内容高级程序设计语言形式语言理论的基本概念构造编译程序的基本概念 原理和技术特点理论性强 内容抽象 理解难度较大 尤其是文法 形式语言及自动机 语法分析及语义分析的概念 原理和技术思想 5 教学内容和教学目标 教学内容 1 基本概念2 语言分析基础3 词法分析4 语法分析5 语义分析与中间代码生成6 符号表与错误处理7 运行时存储空间管理8 优化及目标代码生成 6 教学内容和教学目标 教学目标 掌握形式语言理论与编译程序的实现原理与技术 从形式语言理论的角度 进一步认识与理解程序设计语言及其与编译程序的联系 利用学习到的知识 增强编写和调试程序的能力 将编译程序概念和技术应用于一般软件设计之中 7 先修课程 1 程序设计语言2 算法与数据结构 栈分配 堆分配 静态分配等各种存储分配方式 线性表 二叉查找树 哈希表等多种数据结构 3 离散数学 集合论与数理逻辑是进一步学习形式语言与自动机理论的数学基础 4 软件工程学 掌握大型程序设计及工程化的软件生产方法 5 形式语言与自动机 相当于本课程中词法分析与语法分析的理论基础 8 第一章编译的基本概念 9 基本概念 术语 程序和语言翻译程序和翻译方式宿主机与目标机编译过程概述编译程序的逻辑结构编译程序的前端 后端 遍编译技术的应用与发展 10 1 1术语 程序 一组指令组成的序列 称为程序源程序 用汇编语言或高级语言编写的程序称为源程序目标程序 用目标语言所表示的程序 可以是介于源语言和机器语言之间的 中间语言 可以是某种机器的机器语言 也可以是某机器的汇编语言 翻译程序 将源程序转换为目标程序的程序称为翻译程序 它是指各种语言的翻译器 包括汇编程序和编译程序 是汇编程序 编译程序以及各种变换程序的总称 11 源程序 翻译程序 目标程序三者关系 源程序 翻译程序 目标程序 SOURCEPROGRAM TRANSLATER OBJECTPROGRAM 即源程序是翻译程序的输入 目标程序是翻译程序的输出 1 1术语 12 语言 符合一定规则 文法 的程序的集合低级语言字位码 机器语言 汇编语言特点 与特定的机器有关 功效高 但使用复杂 繁琐 费时 易出错高级语言Fortran Pascal C JAVA等特点 不依赖具体机器 移植性好 对用户要求低 易使用 易维护等 1 1术语 13 1 1术语 翻译程序 将源程序转换为目标程序的程序称为翻译程序 它是指各种语言的翻译器 包括汇编程序和编译程序 是汇编程序 编译程序以及各种变换程序的总称 14 汇编程序若源程序用汇编语言书写 经过翻译程序得到用机器语言表示的程序 这时的翻译程序就称之为汇编程序 这种翻译过程称为 汇编 编译程序若源程序是用高级语言书写 经加工后得到目标程序 上述翻译过程称 编译 汇编程序与编译程序都是翻译程序 主要区别是加工对象的不同 由于汇编语言格式简单 常与机器语言之间有一一对应的关系 汇编程序所要做的翻译工作比编译程序简单的多 1 1术语 15 源程序的编译和运行 编译或汇编阶段运行阶段 1 1术语 16 工作过程 解释程序 对源程序边解释 边执行的程序 类似于口译 不生成目标代码 特点 边解释 边执行 不生成目标代码 比较简单 但速度慢 1 1术语 17 1 1术语 工作过程 编译程序 把源程序翻译成等价的目标程序 汇编语言 机器语言 类似于笔译 源程序 编译程序 目标程序 输出数据 目标程序 运行程序 输入数据 18 编译程序的特点 1 翻译过程是一种功能上等价的翻译 2 输出结果是低级语言 3 编译程序与具体的语言和机器有关 4 被编译的源程序是被加工的对象 目标程序是加工的结果 5 比较复杂 效率高 1 1术语 19 编译程序的分类1 诊断编译程序用于帮助程序开发和调试的编译程序 2 优化编译程序着重于提高目标代码效率的编译程序 3 交叉编译程序如果一个编译程序产生不同于其宿主机的机器代码 4 可变目标编译程序如果不需重写编译程序中与机器无关的部分就能改变目标机 1 1术语 20 1 1术语 宿主机 运行编译程序的计算机 目标机 运行编译程序所产生目标代码的计算机 21 编译过程是将高级语言程序翻译为等价的目标程序的过程 翻译外文资料 1 能识别出句子中的每个单词 2 分析句子的语法结构 3 根据句子的含义进行初步翻译 4 对译文进行修饰 5 写出最后的译文 1 2编译过程 22 1 2编译过程 文献翻译与编译过程的比较 23 词法分析 语法分析 语义分析及中间代码生成 代码优化 目标代码生成 习惯上是将编译过程划分为5个基本阶段 1 2编译过程 24 1 2编译过程 单词 是语言的基本语法单位保留字 或称基本字 如 if else while 标识符 如 max min str 常数 如 12 6 8 a 运算符 如 界符 任务 对源程序的字符串流进行扫描和分解 识别并输出一个个单词符号 及其与此相关的属性 保留字 标识符 常数 运算符 界符 一 词法分析 25 1 2编译过程 单词符号内部的表示 二元式 词法分析依循的规则 描述词法规则的有效工具是正规文法和正规式 例 ifB1 13thenX Y 1 20个字符 基标运常基标运标运常本识算数本识算识算数字符符符号符符符 26 1 2编译过程 27 任务 根据语法规则 即语言的文法 把单词符号串分解成各类语法成分 如表达式 语句 函数等 分析其源程序的结构 判别是否为相应程序语言中的合法程序 二 语法分析 编译程序的核心 1 2编译过程 语法分析依循的规则 描述语法规则的有效工具是上下文无关文法 28 1 2编译过程 上下文无关文法 29 语法分析的结果 语法树 1 2编译过程 赋值语句 标识符 表达式 表达式 标识符 实数 表达式 Z X Y 0 618 表达式 表达式 Z X 0 618 Y 标识符 30 1 2编译过程 任务 规定各语法成分的含义和功能 即规定它们的属性或在执行时应进行的运算和操作 进行相应的语义检查 产生中间代码 三 语义分析及中间代码生成 静态 分析语法成份的含义 进行语义上的正确性检查 动态 根据相应语义 生成中间代码 介于源语言和目标语言之间的中间语言形式 31 生成中间代码的目的 1 利于代码优化2 利于目标代码的移植 中间代码的形式 四元式 三元式 逆波兰表示 1 2编译过程 语义分析依循的规则 为文法的每一个产生式配备计算属性的计算规则 32 1 2编译过程 其中t1 t2 t3为编译程序引入的临时工作单元 例 y x r 6 33 1 2编译过程 任务 对中间代码进行加工变换 以期在最后阶段产生出更为高效 省时间 空间 目标程序 优化包括 局部优化 全局优化 循环优化 四 优化 34 1 2编译过程 例 y x r 6 35 1 2编译过程 五 目标代码生成 任务 把优化后的中间代码变换成目标机的低级语言代码 movr R1mul 6 0 R1movx R2addR1 R2movR2 y 36 编译过程小结 1 2编译过程 37 按逻辑功能不同 可将编译过程划分为五个基本阶段 与此相对应 我们将实现整个编译过程的编译程序划分为五个逻辑阶段 即五个逻辑子过程 每个阶段中都要有 符号表管理和错误处理 1 3编译程序的逻辑结构 38 诊察错误 并能报告用户错误性质和位置 出错处理能力的优劣是衡量编译程序质量好坏的一个重要指标 填表 把源程序中的信息和编译过程中所产生的信息登记在表格中 查表 在随后的编译过程中同时又要不断的查找这些表格中的信息 符号表管理 错误处理 1 3编译程序的逻辑结构 39 典型的编译程序具有7个逻辑部分 S P O P 1 3编译程序的逻辑结构 40 根据编译程序各部分功能 将编译程序分成前端和后端 前端 通常将与源程序有关的编译部分称为前端 分析部分 包括 词法分析 语法分析 语义分析 中间代码生成特点 与源语言有关后端 与目标机有关的部分称为后端 综合部分 包括 代码优化 代码生成特点 与目标机有关 编译程序的前端和后端 1 4编译程序的前端 后端 遍 41 第一遍第二遍 S P中间形式1 S P中间形式2 C2 C1 S P O P 上一遍的结果是下一遍的输入 最后一遍生成目标程序 对源程序 包括源程序中间形式 从头到尾扫描一次 并做有关的加工处理 生成新的源程序中间形式或目标程序 通常称之为一遍 1 4编译程序的前端 后端 遍 42 一遍扫描即可完成整个编译工作的称为一遍扫描编译程序 遍的划分视具体情况而定 内存的大小 源语言的繁简 目标程序质量的高低 优点 1 减少对内存容量的要求2 编译程序结构清晰 各遍功能独立 相互联系简单 缺点 增加读写中间文件的次数 降低效率 1 4编译程序的前端 后端 遍 43 应用 大部分软件工具的开发 都要使用编译技术和方法 语法制导的结构化编辑器程序格式化工具软件测试工具静态分析器 不可能执行的代码 定义后未引用的变量动态测试工具 运行后与期望结果比较程序理解工具 确定调用关系 画出流程图高级语言的翻译工具 1 5编译技术的应用与发展 44 其它应用 文本编辑器信息检索系统模式识别器排版 绘图系统 1 5编译技术的应用与发展 45 并行编译技术目的 提高并行计算机体系结构的性能 超大规模计算的日益增长的需求 两种实现方法 利用重构技术将串行程序并行化直接编写并行程序交叉编译技术由于目标机指令系统与宿主机的指令系统不同 编译时将应用程序的源程序在宿主机上生成目标机代码 称为交叉编译 发展 1 5编译技术的应用与发展 46 1 判断下面的陈述是否正确 1 高级语言程序到低级语言程序的转换是基于语义的等价变换 2 含有优化部分的编译程序的执行效率高 3 因为编译程序和解释程序具有不同的功能 所以它们的实现技术也完全不同 4 编译程序和解释程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 口腔黏膜试题及答案
- 2025年贵州遵义规划勘测设计集团有限公司招聘考试笔试试题(含答案)
- 2025全国消防安全知识竞赛考试题库(含答案)
- 2024年身体健康及养生保健知识竞赛试题(附含答案)
- 2024国家工作人员学法用法试题库及参考答案(版)
- 兽医传染病学模拟试题与答案
- 呼吸机相关肺炎预防与控制指南试题(附答案)
- CRRT护理相关知识考核试题及答案
- 2025年医院临床主治医师《口腔颌面医学影像诊断学》专业知识考试题库与答案
- (2024)“铸牢中华民族共同体意识”应知应会网络知识竞赛题库及答案
- 生产保密文件管理制度
- 胖东来库存管理制度
- 2025-2030中国马来酸酐接枝聚乙烯市场销售格局及投资战略深度调查研究报告
- T/CIMA 0011-2019食品中黄曲霉毒素B1胶体金免疫层析检测卡
- 外墙仿石漆合同协议书
- 股票代持合同协议书
- 广东2025年广东省特种设备检测研究院第一批招聘笔试历年参考题库附带答案详解
- 2025新人教版英语八上单词默写表(先鸟版)
- 起重吊装安全专项施工方案方案
- 基层卫生岗位(社区护理组)练兵和能竞赛试题
- 反恐安全风险评估记录
评论
0/150
提交评论