软件开发过程与项目管理综述天津大学_第1页
软件开发过程与项目管理综述天津大学_第2页
软件开发过程与项目管理综述天津大学_第3页
软件开发过程与项目管理综述天津大学_第4页
软件开发过程与项目管理综述天津大学_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译原理引论编译原理引论授课:胡静授课:胡静2022-4-13编译原理2教材及参考书教材及参考书教材:教材:程序设计语言编译原理(第程序设计语言编译原理(第3版)版),国防工业出版社,国防工业出版社,陈火旺等编著陈火旺等编著主要参考资料主要参考资料编译原理(编译原理(Compilers Principles, Techniques, and Tools)出)出版社:机械工业出版社版社:机械工业出版社编译原理编译原理,清华大学出版社,吕映芝、张素琴、蒋维杜,清华大学出版社,吕映芝、张素琴、蒋维杜编著编著编译器工程编译器工程Design a Compiler,机械工业出版,机械工业出版社,社,Ke

2、ith D.Cooper、Linda Torczon著;冯速译著;冯速译2022-4-13编译原理3相关课程相关课程课程基础课程基础数据结构数据结构计算机原理和汇编语言计算机原理和汇编语言高级程序设计语言高级程序设计语言后续课程后续课程编译技术编译技术2022-4-13编译原理4第一章第一章 概论概论编译的起源:程序设计语言的发展编译的起源:程序设计语言的发展基本概念基本概念编译过程和编译程序的构造编译过程和编译程序的构造2022-4-13编译原理5程序设计语言的发展程序设计语言的发展2022-4-13编译原理6基本概念基本概念低级语言(低级语言(Low level Language) 字位码

3、、机器语言、汇编语言字位码、机器语言、汇编语言特点:与特定的机器有关,功效高,但使用复杂、繁琐、费特点:与特定的机器有关,功效高,但使用复杂、繁琐、费时、易出错时、易出错高级语言高级语言Fortran 、Pascal、C 语言等语言等特点:不依赖具体机器,移植性好、对用户要求低、易使特点:不依赖具体机器,移植性好、对用户要求低、易使用、易维护等。用、易维护等。 2022-4-13编译原理7基本概念基本概念2022-4-13编译原理8基本概念基本概念2022-4-13编译原理9源程序的编译和运行源程序的编译和运行2022-4-13编译原理10源程序的解释运行源程序的解释运行2022-4-13编译

4、原理11源程序的编译源程序的编译-解释运行解释运行2022-4-13编译原理12编译器和解释器编译器和解释器编译器和解释器的比较编译器和解释器的比较相同点(执行相同的任务)相同点(执行相同的任务):检查输入程序并确定这个程序是否一个有效程序检查输入程序并确定这个程序是否一个有效程序建立一个内部模型来刻画输入程序的结构和含义建立一个内部模型来刻画输入程序的结构和含义决定在执行期间值的存放位置决定在执行期间值的存放位置不同点(执行的行为不同):不同点(执行的行为不同):编译器以一个可执行程序的描述作为输入,以另一个编译器以一个可执行程序的描述作为输入,以另一个等价的可执行程序的描述作为输出。等价的

5、可执行程序的描述作为输出。解释器以一个可执行程序的描述作为输入,以执行这解释器以一个可执行程序的描述作为输入,以执行这一可执行程序描述的结果作为输出。一可执行程序描述的结果作为输出。2022-4-13编译原理13举例举例典型的编译器:典型的编译器:gcc, javac非典型的编译器:非典型的编译器:latex (document compiler) :Transforms a LaTeX document into DVI printing commandsInput information = document (not program)解释器:解释器:f2c : Fortran-to-C

6、translator (both high-level)latex2html : LaTeX-to-HTML (both documents)2022-4-13编译原理14我们为什么需要编译器我们为什么需要编译器编写、调试、维护和理解用装配语言编写、调试、维护和理解用装配语言(assemble language)编写的程序是很困难的编写的程序是很困难的自从第一个编译器出现之后,软件产品的数量有了自从第一个编译器出现之后,软件产品的数量有了巨大的增加。巨大的增加。但是仍然有一些情况需要用装配语言编写但是仍然有一些情况需要用装配语言编写例如,访问某些底层的机器资源(设备驱动)例如,访问某些底层的机

7、器资源(设备驱动)这些代码规模一般较小,还是需要编译器去处理其他这些代码规模一般较小,还是需要编译器去处理其他的应用的应用2022-4-13编译原理15编译器构造法的研究目的编译器构造法的研究目的好的编译器是计算机科学的缩影好的编译器是计算机科学的缩影包含大量的技术:贪婪算法(寄存器分配)、启发式包含大量的技术:贪婪算法(寄存器分配)、启发式搜索技术(列表调度)、图形算法(死码消除)、动搜索技术(列表调度)、图形算法(死码消除)、动态规划(指令筛选)、有穷自动机和下推自动机(扫态规划(指令筛选)、有穷自动机和下推自动机(扫描和语法分析)、不动点算法(数据流分析)描和语法分析)、不动点算法(数据

8、流分析)处理复杂的问题:动态分配、同步、命名、局部化、处理复杂的问题:动态分配、同步、命名、局部化、存储器分层管理、管道调度存储器分层管理、管道调度提供完整的解决方案:有机的结合算法、软件体系结提供完整的解决方案:有机的结合算法、软件体系结构和软件工程的各种理论,对棘手问题给出综合性的构和软件工程的各种理论,对棘手问题给出综合性的解答方案。解答方案。2022-4-13编译原理16什么是编译器什么是编译器什么是编译程序什么是编译程序预处理器预处理器编译器编译器汇编器汇编器装配连接编辑装配连接编辑骨架程序骨架程序 源程序源程序 目标汇编程序目标汇编程序 可重定位机器代码可重定位机器代码 绝对机器码

9、绝对机器码可重定位目标文件库可重定位目标文件库2022-4-13编译原理17源代码源代码符合人类阅读习惯符合人类阅读习惯符合人类语法定义符合人类语法定义使用被命名的结构,例如变量和过程使用被命名的结构,例如变量和过程2022-4-13编译原理18装配语言机器代码装配语言机器代码符合硬件需求符合硬件需求包含机器指令,使用寄存器和没有命名的内存地址包含机器指令,使用寄存器和没有命名的内存地址对人类来说很难理解对人类来说很难理解2022-4-13编译原理19例子:输出的装配代码例子:输出的装配代码没有优化的代码没有优化的代码优化后的代码优化后的代码2022-4-13编译原理20编译器的基本原则编译器

10、的基本原则编译器是工程对象,是具有独特目标的大型软件系编译器是工程对象,是具有独特目标的大型软件系统,两个设计原则必须遵守统,两个设计原则必须遵守不违背原义不违背原义编译器必须保持被编译程序的含义不变编译器必须保持被编译程序的含义不变这一原则是编译器设计者与编译器用户之间的契约的这一原则是编译器设计者与编译器用户之间的契约的核心核心实用性原则实用性原则编译器必须用某种明确的方式改进输入程序编译器必须用某种明确的方式改进输入程序例如代码优化等对输入程序的改进例如代码优化等对输入程序的改进2022-4-13编译原理21有效的转换有效的转换目标:产生和源代码描述相同计算的机器代码目标:产生和源代码描

11、述相同计算的机器代码这种转换是唯一的嘛?这种转换是唯一的嘛?有没有有没有“完美的转换完美的转换”(速度快,代码量小)(速度快,代码量小)编译器优化编译器优化=找到更好的转换找到更好的转换2022-4-13编译原理22转换的正确性转换的正确性产生的代码必须精确的执行和源代码相同的计算产生的代码必须精确的执行和源代码相同的计算正确性很重要正确性很重要用不正确的编译器调试程序很难用不正确的编译器调试程序很难和开发的成本、安全性密切相关和开发的成本、安全性密切相关编译原理这门课程讲述的就是可以保证转换安全性的编译原理这门课程讲述的就是可以保证转换安全性的技术。技术。2022-4-13编译原理23如何转

12、换如何转换转换是一个很复杂的过程转换是一个很复杂的过程源程序语言和目标程序语言是截然不同的源程序语言和目标程序语言是截然不同的我们需要结构化这个转换过程我们需要结构化这个转换过程定义中间阶段定义中间阶段每个阶段完成特定的功能每个阶段完成特定的功能2022-4-13编译原理24一个简单的编译器的结构一个简单的编译器的结构2022-4-13编译原理25简单的前端结构简单的前端结构2022-4-13编译原理26Analogy(ctd)前端可以通过类比于人类理解自然语言的过程进行前端可以通过类比于人类理解自然语言的过程进行解释解释词法分析词法分析自然语言:自然语言:He wrote the progr

13、am单词:单词: he wrote the program编程语言:编程语言:if (b=0) a=btoken: if ( b = = 0 ) a = b 2022-4-13编译原理27Analogy(ctd)语法分析语法分析自然语言自然语言编程语言编程语言2022-4-13编译原理28Analogy(ctd)语义分析语义分析自然语言自然语言Hewrotethecomputernounverbarticlenoun语法正确,语义错误!语法正确,语义错误!编程语言编程语言if (b=0) a=footestassignment如果如果a是一个整型变量而是一个整型变量而foo是一个过程,那么语义

14、分析是一个过程,那么语义分析就会报错就会报错2022-4-13编译原理29词法分析词法分析词法分析也叫线性分析和扫描。词法分析也叫线性分析和扫描。从左到右的读构成源程序的字符流,分组为多个记从左到右的读构成源程序的字符流,分组为多个记号。号。词法分析器词法分析器position := initial + rate position := initial + rate * * 60 60idid1 1 := := idid2 2 + + idid3 3 * * 60 602022-4-13编译原理30语法分析语法分析语法分析也叫层次分析,把源程序的记号进一步分语法分析也叫层次分析,把源程序的记号

15、进一步分组,产生被编译器用于生成代码的语法短语。组,产生被编译器用于生成代码的语法短语。程序的语法结构常常需要递归程序的语法结构常常需要递归上下文无关文法是递归规则的一种形式化,可以指导上下文无关文法是递归规则的一种形式化,可以指导语法分析语法分析由于词法分析不要求递归,因此我们通常不明确的界由于词法分析不要求递归,因此我们通常不明确的界定词法分析和语法分析的界限。也就是说,我们将词定词法分析和语法分析的界限。也就是说,我们将词法分析程序当成语法分析程序调用的一个子程序。法分析程序当成语法分析程序调用的一个子程序。2022-4-13编译原理31语法分析(续)语法分析(续)语法分析器语法分析器i

16、did1 1 := id := id2 2 + id + id3 3 * * 60 60idid1 1idid3 3idid2 2:=:=+ +* *6060在本例中,算符优先级在本例中,算符优先级可以通过如下方法定义:可以通过如下方法定义:1.定义程序语言的语法定义程序语言的语法规则体现算符的优先级规则体现算符的优先级2.通过某些规则库,例通过某些规则库,例如算符优先级表格等来如算符优先级表格等来定义算符的优先级定义算符的优先级2022-4-13编译原理32语义分析(续)语义分析(续)语义分析器语义分析器idid1 1idid3 3idid2 2:=:=+ +* *6060idid1 1id

17、id3 3idid2 2:=:=+ +* *inttorealinttoreal6060在本例中,几个标识符在本例中,几个标识符都是实数类型,而且源都是实数类型,而且源程序语言允许整数向实程序语言允许整数向实数类型的强制转换数类型的强制转换2022-4-13编译原理33编译器的应用模型(逻辑结构)编译器的应用模型(逻辑结构)出出错错处处理理语法分析程序语法分析程序语义分析程序语义分析程序目标代码生成程序目标代码生成程序词法分析程序词法分析程序中间代码生成程序中间代码生成程序代码优化程序代码优化程序表表格格管管理理编译的前端编译的前端(Front End)分析部分分析部分与源语言有关与源语言有关编译的后端编译的后端(Back End)综合部分综合部分与目标语言有关与目标语言有关2022-4-13编译原理342022-4-13编译原理352022-4-13编译原理36遍(遍(PASS)遍:对源程序(包括源程序的中间表示形式)从头到尾扫描遍:对源程序(包括源程序的中间表示形式)从头到尾扫描一次并作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论