1 / 20

编译原理

编译原理. 20031014079 吴 广. 课程简介. 先行课程 :高等数学、C (PASCAL) 、离散数学、       汇编语言、数据结构. 编译原理课程应用领域 编译器的设计 一般的软件设计. 例如: 文本编辑器、信息检索系统、模式识别器 排版、绘图系统 程序验证器. 参 考 书 籍 参 考 书 籍. 编译原理 吕映芝 清华大学出版社. Compiler Construction Principle and Pratice 编译原理及实践 Kenneth C.Louden 机械工业出版社.

rachel
Download Presentation

编译原理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 编译原理 20031014079 吴 广

  2. 课程简介 先行课程:高等数学、C (PASCAL)、离散数学、       汇编语言、数据结构 • 编译原理课程应用领域 • 编译器的设计 • 一般的软件设计 • 例如: • 文本编辑器、信息检索系统、模式识别器 • 排版、绘图系统 • 程序验证器

  3. 考 书 籍 参 考 书 籍 编译原理 吕映芝 清华大学出版社 Compiler Construction Principle and Pratice 编译原理及实践 Kenneth C.Louden 机械工业出版社 编译程序设计原理 杜淑敏等 北京大学出版社 编译程序构造原理 和实现技术 金成植 高等教育出版社 编译原理 李赣生等 清华大学出版社 程序设计语言编译程序 陈火旺等 国防工业出版社

  4. 参考 网站 http://ultra1.wuhee.edu.cn/compiler/compiler.html http://edu.netbig.com/kaoyan/e4/245/20000524/gong.htm http://www.artech.com.cn/test/luntan/os.asp Return

  5. 编译原理 第一章 编译程序概述 第二章 一个微小编译器 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法 第六章 自底向上优先分析方法 第七章 LR分析方法 第八章 中间代码生成 第九章 代码优化 第十章 代码生成

  6. 第一章 编译程序概述 1.1 什么是编译程序 1.2 编译程序的结构 1.3 编译程序的设计实现 1.4 经典的编译程序

  7. 第一章 编译程序概述 1.1 什么是编译程序 1. 程序设计语言 过程式语言 Fortran,Pascal,C 函数式语言 Lisp 逻辑式语言 Prolog 对象式语言 C++         汇编语言         机器语言 高级语言 低级语言:面向机器的语言 程序设 计语言

  8. 翻译:是指在计算机中放置一个能由计算机直接执行的翻译程序,它以某一种程序设计语言(源语言)所编写的程序(源程序)作为翻译或加工的对象,当计算机执行翻译程序时,就将它翻译为与之等价的另一种语言(目标语言)的程序(目标程序)。翻译:是指在计算机中放置一个能由计算机直接执行的翻译程序,它以某一种程序设计语言(源语言)所编写的程序(源程序)作为翻译或加工的对象,当计算机执行翻译程序时,就将它翻译为与之等价的另一种语言(目标语言)的程序(目标程序)。 输出 输入 编译:如果一个翻译程序的源语言是某种高级语言,其目标语言是相对于某一计算机的汇编语言或机器语言,则称这种翻译程序为编译程序(或称为编译器)。 2. 翻译和解释程序(1)翻译和编译程序

  9. 初始数据 源 程 序 计 算 结 果 目标程序 编 译 程 序 计 算 结 果 解 释 程 序 源程序 初始数据 (2) 编译和解释程序

  10. 解释程序和编译程序的区别 解释程序和编译程序的根本区别: 是否生成目标代码

  11. 1.2 编译程序的结构 翻译外文资料与编译源程序进行类比

  12. 编译程序的功能和组织结构 表 处 理 前 端 词 法 分 析 语 法 分 析 语 义 分 析 中 间 代 码 生 成 中 间 代 码 优 化 后 端 目 标 代 码 生 成 源 程 序 目 标 程 序 错 误 处 理

  13. 相关概念 编译程序的前端: 与源语言有关,而与目标机无关的编译程序 编译程序的后端: 与目标机有关,而与源语言无关的编译程序 遍(趟):是对源程序或源程序的中间结果从头到尾扫描一遍,并作有关加工处理,生成新的中间结果或目标程序。 宿主机:运行编译程序的计算机称为宿主机。 目标机:运行编译程序所产生的目标代码的计算机成为目标机。

  14. 1.2.1 以阶段划分编译器 1.自然语言的翻译过程: 识别单词 识别句子结构 理解意思 译成中文并修饰 2.编译器的工作过程: 词法分析 语法分析 语义分析 目标代码生成 3.编译器的阶段(逻辑模块划分) 4.中间代码的重要作用

  15. 例7Pascal源程序语句如下: var x, y, z : real; x := y + z * 60; 1.2.2 编译器各阶段的工作 (源程序)var x, y, z : real; x := y + z * 60; (记号流)var id1, id2, id3 : real; id1 := id2+id3*60;

  16. 1.2.3 编译器各阶段的工作(续1) 中间代码的形式与作用: (序号)(op, arg1, arg2, result) result := arg1 op arg2 (1) (itr, 60, , T1) (2) (*, id3, T1, T2) (3) (+, id2, T2, T3) (4) (:=, T3, , id1)

  17. (1) (itr, 60, , T1) (2) (*, id3, T1, T2) (3) (+, id2, T2, T3) (4) (:=, T3, , id1) 1.2.4 编译器各阶段的工作(续2) (1) (*, id3, 60.0, T1) (2) (+, id2, T1, id1) MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 R2 := id3 R2 := R2 * 60.0 R1 := id2 R1 := R1 + R2 id1 := R1 id1 := id2 + id3 * 60.0 x := y + z * 60;

  18. 各阶段工作的归纳 <1> 词法分析:识别单词,至少分以下几大类:关键字(保留字)、标识符、字面量、特殊符号; <2> 语法分析:得到语言结构并以树的形式表示; <3> 语义分析:考察结构正确的句子是否语义合法,可修改树结构; <4> 中间代码生成(可选):生成一种既接近目标语言,又与具体机器无关的表示,便于优化与代码生成; (到目前为止,编译器与解释器可以一致) 1.2.5 编译器各阶段的工作(续3) <5> 中间代码优化(可选):局部优化、循环优化、全局优化等;优化实际上是一个等价变换,变换前后的指令序列完成同样的功能,但是,在占用的空间上和程序执行的时间上都更省、更有效。 <6> 目标代码生成:不同形式的目标代码-汇编、可重定位、内存形式(Load-and-Go); <7> 符号表管理:合理组织符号,便于各阶段查找、填写等; <8> 出错处理:错误的种类-词法错、语法错、静态语义错、动态语义错。

  19. 1.3 编译程序的设计实现 • 开发编译程序的途径: • 预处理法 • 移植法 • 自展法 • 工具法 • 理论法 设计和实现一个编译程序,必须精通: • 源 语 言 • 目标语言 • 编译方法 要求:C语言实现编译程序的开发

  20. 1.4 经典的编译程序 Pascal编译程序 C编译程序 Fortran 编译程序

More Related