编译原理清华大学导论课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《编译原理清华大学导论课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 清华大学 导论 课件
- 资源描述:
-
1、编译原理清华大学导论编译原理清华大学导论课程内容课程内容 v介绍编译器构造的一般原理和基本实现方法介绍编译器构造的一般原理和基本实现方法v理论知识:形式语言和自动机理论、语法制导翻译的定义和属性文法等理论知识:形式语言和自动机理论、语法制导翻译的定义和属性文法等v形式化描述技术形式化描述技术v对编译原理和技术的宏观理解,注意力无需分散到枝节算法,无需偏向于某种源语言或目标机对编译原理和技术的宏观理解,注意力无需分散到枝节算法,无需偏向于某种源语言或目标机器器学习的意义学习的意义 v对编程语言的设计和实现有深刻的理解,对和编程语言有关的理论有所了解,对宏观上把握编程对编程语言的设计和实现有深刻的
2、理解,对和编程语言有关的理论有所了解,对宏观上把握编程语言来说,起一个奠基的作用。语言来说,起一个奠基的作用。v从软件工程看,编译器是一个很好的实例,所介绍的概念和技术能应用到一般的软件设计之中。从软件工程看,编译器是一个很好的实例,所介绍的概念和技术能应用到一般的软件设计之中。v大多数程序员同时是简单语言的设计者,有助于提高对这些语言的设计水平。大多数程序员同时是简单语言的设计者,有助于提高对这些语言的设计水平。v在软件逆向工程、软件的设计方法、程序理解和软件安全等方面有着广泛的应用。在软件逆向工程、软件的设计方法、程序理解和软件安全等方面有着广泛的应用。课程要求课程要求v讲课进展较快,平时
3、要复习并加深理解。讲课进展较快,平时要复习并加深理解。v作业较多,要求独立完成。作业较多,要求独立完成。v实验和课内实践,每次验收检查。实验和课内实践,每次验收检查。v学期总评成绩学期总评成绩 =考试成绩考试成绩60%+60%+平时成绩平时成绩40%40%平时成绩平时成绩40%=40%=作业实验考勤作业实验考勤30%+30%+课内实践课内实践10%10%编译系统是现代计算机系统的基本组成之一,编译程序构造的基本原理和技术不仅应用于编译程编译系统是现代计算机系统的基本组成之一,编译程序构造的基本原理和技术不仅应用于编译程序的设计,也广泛应用于一般软件的设计和实现。本课程是计算机类专业的一门重要的
4、核心专业课。序的设计,也广泛应用于一般软件的设计和实现。本课程是计算机类专业的一门重要的核心专业课。先修课程:先修课程:高级程序设计语言、汇编语言、高级程序设计语言、汇编语言、离散数学、数据结构离散数学、数据结构学习要求:学习要求:不旷课,上课认真听讲,课上保持安静;不旷课,上课认真听讲,课上保持安静;课后即时复习,认真完成作业;课后即时复习,认真完成作业;实验课内实践程序独立设计及实现实验课内实践程序独立设计及实现。学习目标学习目标 通过本课程的学习,旨在使同学们掌握程序设计语言的形式化描述和编译的基本理论、原理和技术,通过本课程的学习,旨在使同学们掌握程序设计语言的形式化描述和编译的基本理
5、论、原理和技术,并对编译程序有较为具体的认识。使同学们能运用所学过的基本知识、着手开发系统程序,为今后的工作并对编译程序有较为具体的认识。使同学们能运用所学过的基本知识、着手开发系统程序,为今后的工作(理论研究和技术开发)打下基础。(理论研究和技术开发)打下基础。具体为:具体为:(1 1)掌握编译程序基本结构及构造的基本原理和技术;)掌握编译程序基本结构及构造的基本原理和技术;(2 2)掌握文法、形式语言及自动机的基本概念和在编译程序构造中的应用;)掌握文法、形式语言及自动机的基本概念和在编译程序构造中的应用;(3 3)掌握典型的几种语法分析方法的基本原理和实现方法;)掌握典型的几种语法分析方
6、法的基本原理和实现方法;(4 4)掌握语法制导方法在语义分析中的应用和中间代码生成方法;)掌握语法制导方法在语义分析中的应用和中间代码生成方法;(5 5)掌握存储分配的基本思想和实现方法;)掌握存储分配的基本思想和实现方法;(6 6)掌握代码优化及代码生成的方法。)掌握代码优化及代码生成的方法。学习向导学习向导 编译原理编译原理课程是理论性较强的课程。其特点是概念多、内容抽象。尤其是文法、形式语言及自动机课程是理论性较强的课程。其特点是概念多、内容抽象。尤其是文法、形式语言及自动机的概念是计算机专业的理论学习和研究的基础。掌握这些基本理论、原理和技术,对于培养同学们对事物的的概念是计算机专业的
7、理论学习和研究的基础。掌握这些基本理论、原理和技术,对于培养同学们对事物的抽象能力以及分析问题和解决问题的能力大有帮助。抽象能力以及分析问题和解决问题的能力大有帮助。编译原理与方法对于深刻理解程序设计语言、深入了解程序在计算机中的运行机制、掌握程序设计语言编译原理与方法对于深刻理解程序设计语言、深入了解程序在计算机中的运行机制、掌握程序设计语言的翻译方法起到不可替代的作用。同时的翻译方法起到不可替代的作用。同时编译原理编译原理课程也是实践性很强的课程,要求同学们在基本掌握了课程也是实践性很强的课程,要求同学们在基本掌握了编译理论和技术的基础上,综合应用先修课程及本课程的知识,完成课程的实验和课
8、程设计。编译理论和技术的基础上,综合应用先修课程及本课程的知识,完成课程的实验和课程设计。参考资料参考资料 教材:教材:11编译原理编译原理(第三版)(第三版)主编:王生原、董渊、张素琴、吕映芝主编:王生原、董渊、张素琴、吕映芝 出版社:清华大学出版社出版社:清华大学出版社 出版时间:出版时间:20152015年年参考书:参考书:11编译原理编译原理 主编:何炎祥主编:何炎祥 出版社:华中理工大学出版社出版社:华中理工大学出版社 出版时间:出版时间:20102010年年1010月月22程序设计语言编译原理(第程序设计语言编译原理(第3 3版)版)主编:陈火旺、刘春林、谭庆平、赵克佳、刘越主编:
9、陈火旺、刘春林、谭庆平、赵克佳、刘越 出版社:国防工业出版社出版社:国防工业出版社 出版时间:出版时间:2001220012年年8 8月月33编译原理技术与工具(英文版)编译原理技术与工具(英文版)Compilers:Principles,Techniques,and Compilers:Principles,Techniques,and ToolsTools 主编:主编:AlfredAlfred V.Aho,RaviV.Aho,Ravi Sethi,JeffreySethi,Jeffrey D.UllmanD.Ullman 出版社:人民邮电出版社出版社:人民邮电出版社 出版时间:出版时间:2
10、0022002年年2 2月月 参考资料参考资料44编译原理与技术编译原理与技术(第二版)(第二版)主编:陈意云主编:陈意云 出版社:中国科学技术大学出版社出版社:中国科学技术大学出版社 出版时间:出版时间:20022002年年1 1月月55编译程序构造原理和实现技术编译程序构造原理和实现技术 主编:金成植主编:金成植 出版社:高等教育出版社出版社:高等教育出版社 出版时间:出版时间:20022002年年7 7月月66编译原理及编译程序构造编译原理及编译程序构造 主编:高仲仪、金茂忠主编:高仲仪、金茂忠 出版社:北京航空航天大学出版社出版社:北京航空航天大学出版社 出版时间:出版时间:20012
11、001年年3 3月月77编译原理编译原理(第第2 2版版)主编:蒋立源主编:蒋立源,康慕宁康慕宁 出版社:西北工业大学出版社出版社:西北工业大学出版社 出版时间:出版时间:19991999年年4 4月月88编译原理编译原理 主编:张幸儿主编:张幸儿 出版社:科学出版社出版社:科学出版社 出版时间:出版时间:19991999年年4 4月月 第第1 1章章 引论引论 本章主要内容:本章主要内容:v什么是编译程序什么是编译程序v编译过程和编译程序的结构编译过程和编译程序的结构v为什么要学习编译程序为什么要学习编译程序 本章的重点:本章的重点:本章没有难以理解的内容本章没有难以理解的内容,主要是对编译
12、程序的功能和结构做一综主要是对编译程序的功能和结构做一综合描述合描述1.1 1.1 什么叫编译程序什么叫编译程序 使用过现代计算机的人都知道,多数用户是应用高级语言来实现他们所需要的计算的。现代计算机系使用过现代计算机的人都知道,多数用户是应用高级语言来实现他们所需要的计算的。现代计算机系统一般都含有不止一个的高级语言编译程序,对有些高级语言甚至配置了几个不同性能的编译程序,供用统一般都含有不止一个的高级语言编译程序,对有些高级语言甚至配置了几个不同性能的编译程序,供用户按不同需要进行选择。户按不同需要进行选择。要在计算机上执行用高级语言(或汇编语言)编写的程序,必须通过特定的途径来进行,也就
13、是要通要在计算机上执行用高级语言(或汇编语言)编写的程序,必须通过特定的途径来进行,也就是要通过翻译程序把用高级语言(或汇编语言)编写的程序翻译成为机器语言构成的程序,计算机才能执行。过翻译程序把用高级语言(或汇编语言)编写的程序翻译成为机器语言构成的程序,计算机才能执行。在计算机上执行一个高级语言程序一般要分为两步:在计算机上执行一个高级语言程序一般要分为两步:第一步,用一个编译程序把高级语言翻译成机器语言程序;第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。第二步,运行所得的机器语言程序求得计算结果。(1 1)翻译程序()翻译程序(Trans
14、latorTranslator)通常所说的翻译程序是指这样的一个程序,它能够把某一种语言程序(称为源语言程序或源程序)通常所说的翻译程序是指这样的一个程序,它能够把某一种语言程序(称为源语言程序或源程序)转换成另一种语言程序(称为目标语言程序或目标程序),而后者与前者在逻辑上是等价的。转换成另一种语言程序(称为目标语言程序或目标程序),而后者与前者在逻辑上是等价的。源程序源程序(source program)翻译程序翻译程序目标程序目标程序(target program)输入输入输出输出图图1.1 翻译程序翻译程序 翻译程序根据所处理的对象和实现的途径不同又分为:汇编程序、编译程序和解释程序。
15、翻译程序根据所处理的对象和实现的途径不同又分为:汇编程序、编译程序和解释程序。(2 2).汇编程序(汇编程序(AssemblerAssembler)如果源语言是某种汇编语言,而目标语言是某种计算机的机器语言,这样的一个翻译程序就称为汇编程序。如果源语言是某种汇编语言,而目标语言是某种计算机的机器语言,这样的一个翻译程序就称为汇编程序。源程序源程序(汇编语言)(汇编语言)翻译程序翻译程序(汇编程序)(汇编程序)目标程序目标程序(机器语言)(机器语言)输入输入输出输出图图1.2 汇编程序汇编程序(3 3).编译程序(编译程序(CompilerCompiler)如果源语言是某种高级语言,而目标语言是
16、某种低级语言(汇编语言或机器语言),这样的一个翻译如果源语言是某种高级语言,而目标语言是某种低级语言(汇编语言或机器语言),这样的一个翻译程序就称为编译程序。程序就称为编译程序。源程序源程序(高级语言)(高级语言)翻译程序翻译程序(编译程序)(编译程序)目标程序目标程序(低级语言)(低级语言)图图1.3 编译程序编译程序输入输入输出输出(4 4).解释程序(解释程序(Interpreter)这是另外一种类型的翻译程序,在翻译过程它按照高级语言源程序在计算机上执行的动态顺序对源程这是另外一种类型的翻译程序,在翻译过程它按照高级语言源程序在计算机上执行的动态顺序对源程序的语句逐条翻译(解释),边解
17、释边执行直至结束,它不产生目标程序,它的工作结果就是源程序的执序的语句逐条翻译(解释),边解释边执行直至结束,它不产生目标程序,它的工作结果就是源程序的执行结果,这样的一个翻译程序就称为解释程序。行结果,这样的一个翻译程序就称为解释程序。源程序源程序(高级语言)(高级语言)翻译程序翻译程序(解释程序)(解释程序)计算结果计算结果输入输入输出输出图图1.4 解释程序解释程序初始数据初始数据根据不同的用途,编译程序可进一步分类根据不同的用途,编译程序可进一步分类:(1)诊断编译程序()诊断编译程序(Diagnostic Compiler):):专门用于帮助程序开发和调试的编译程序。专门用于帮助程序
18、开发和调试的编译程序。(2)优化编译程序()优化编译程序(Optimizing Compiler):):着重于提高目标代码效率的编译程序。着重于提高目标代码效率的编译程序。(3)交叉编译程序)交叉编译程序(Cross Compiler):如果一个编译程序产生不同于其宿主机的机器代码。如果一个编译程序产生不同于其宿主机的机器代码。(4)可变目标编译程序()可变目标编译程序(Retargetable Compiler):):不需重写编译程序中与机器无关的部分就能改变目标机。不需重写编译程序中与机器无关的部分就能改变目标机。宿主机(宿主机(host machine):运行编译程序的计算机。):运行编
19、译程序的计算机。目标机目标机(object machine):运行编译程序所产生目标代码的计算机。:运行编译程序所产生目标代码的计算机。1.2 1.2 编译过程概述编译过程概述 编译程序的工作,从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。编译程序的工作,从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。一段英文翻译为中文时,通常需经下列步骤:一段英文翻译为中文时,通常需经下列步骤:(1)识别出句子中的一个个单词;)识别出句子中的一个个单词;(2)分析句子的语法结构;)分析句子的语法结构;(3)根据句子的含义进行初步翻译;)根据句子的含义进行初步翻译;(4)对译文进行修
20、饰;)对译文进行修饰;(5)写出最后的译文。)写出最后的译文。类似地,编译程序的工作过程一般也可以划分为五个阶段:词法分析、语法分析、语义分析与中间代类似地,编译程序的工作过程一般也可以划分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。码产生、优化、目标代码生成。第一阶段第一阶段:词法分析词法分析 (Lexical analysisLexical analysis)词法分析的任务:词法分析的任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。保留字(保留字(beginbegi
21、n、endend、ifif、forfor、whilewhile等)、等)、标识符(标识符(x1x1、s s等变量名)、等变量名)、常数常数(3.14(3.14、100100等等)、算符(算符(+、-、andand、oror等)、等)、界符(标点符号、左右括号等)。界符(标点符号、左右括号等)。例如,对于例如,对于PascalPascal的循环语句:的循环语句:for I for I:1 to 100 do1 to 100 do词法分析的结果是识别出如下的单词符号:词法分析的结果是识别出如下的单词符号:保留字保留字 forfor 标识符标识符 I I 赋值号:赋值号:=整常数整常数 1 1 保留
22、字保留字 toto 整常数整常数 100100 保留字保留字 dodo 单词符号是语言的基本组成成分,是人们理解和编写程序的基本要素。识别和理解这些要素无单词符号是语言的基本组成成分,是人们理解和编写程序的基本要素。识别和理解这些要素无疑也是翻译的基础。疑也是翻译的基础。如同将英文翻译成中文的情形一样,如果你对英语单词不理解,那就谈不上进行正确的翻译。如同将英文翻译成中文的情形一样,如果你对英语单词不理解,那就谈不上进行正确的翻译。在词法分析阶段的工作中所依循的是语言的词法规则(或称构词规则)。描述词法规则的有效在词法分析阶段的工作中所依循的是语言的词法规则(或称构词规则)。描述词法规则的有效
23、工具是正规式和有限自动机。工具是正规式和有限自动机。第二阶段,语法分析第二阶段,语法分析(Syntax Analysis)(Syntax Analysis)语法分析的任务是:语法分析的任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴),如在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴),如“短短语语”、“子句子句”、“句子句子”(“语句语句”)、)、“程序段程序段”和和“程序程序”等。通过语法分析,确定整个输入串是否等。通过语法分析,确定整个输入串是否构成语法上正确的构成语法上正确的“程序程序”。语法分析所依循的是语言的
24、语法规则。语法规则通常用上下文无关文法描述。语法分析所依循的是语言的语法规则。语法规则通常用上下文无关文法描述。词法分析是一种线性分析,而语法分析是一种层次结构分析。例如,在很多语言中,符号串词法分析是一种线性分析,而语法分析是一种层次结构分析。例如,在很多语言中,符号串 z:=X十十0.618*Y代表一个代表一个“赋值语句赋值语句”,而其中的,而其中的 X0.618*Y代表一个代表一个“算术表达式算术表达式”。因而,语法分析的任务就是识别。因而,语法分析的任务就是识别 X0.618*Y为算术表达式,同时,识别上述整个符号串属于赋值语句这个范畴。为算术表达式,同时,识别上述整个符号串属于赋值语
25、句这个范畴。第三阶段,语义分析与中间代码产生第三阶段,语义分析与中间代码产生(Semantic Analysis and Intermediate Generator)(Semantic Analysis and Intermediate Generator)此阶段的任务是:此阶段的任务是:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。中间代码是一种独立于具体硬件的记号系统。中间代码是一种独立于具体硬件的记号系统。常用的中间代码:三地址码,四元式,三元式、间接三元式、逆波兰式,树形表示
展开阅读全文