编译原理全册配套完整精品课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《编译原理全册配套完整精品课件.ppt》由用户(金钥匙文档)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 配套 完整 精品 课件
- 资源描述:
-
1、编译原理全册配套完整精品课件编译原理全册配套完整精品课件 编译原理 3 自我介绍自我介绍 n姓名:刘善梅姓名:刘善梅 nQQQQ : 3068353030683530 n办公室:逸夫楼办公室:逸夫楼C427C427 n 邮箱:邮箱: 4 课程介绍课程介绍 n两门独立的课程:理论(两门独立的课程:理论(4848学时)学时) 实验(实验(1616学时)学时) n考试成绩组成考试成绩组成 理论:理论:平时作业和考勤占平时作业和考勤占20%20%,期末结业,期末结业 考试占考试占80%80%; 实验:实验:根据实验报告和程序源代码评分,根据实验报告和程序源代码评分, 实验报告占实验报告占40%, 40
2、%, 程序源代码占程序源代码占60%60%。 n课程特点:课程特点:难!难! 5 开课目的:开课目的:介绍设计与构造程序设计语言介绍设计与构造程序设计语言编译程序编译程序的的 原理与方法原理与方法 源程序源程序 编译编译 程序程序 目标程序目标程序 连接连接 可执行程序可执行程序 预备知识:预备知识:形式语言与自动机、形式语言与自动机、两门以上的高两门以上的高 级程序设计语级程序设计语 言言 汇编语言汇编语言 数据结构等数据结构等 How? 6 教学要求教学要求 通过课程的学习和实验的完成,通过课程的学习和实验的完成, 应该应该清楚的理解一个编译程序是如何工作的;清楚的理解一个编译程序是如何工
3、作的; 如果在以后遇到了任何一个程序设计语言,如果在以后遇到了任何一个程序设计语言,应该应该 知道如何实现这个语言的多数机制;知道如何实现这个语言的多数机制; 应应具有一定的使用编译构造工具开发编译程序的具有一定的使用编译构造工具开发编译程序的 经验;经验; 会会将所学的常用技术和算法应用于类似的软件的将所学的常用技术和算法应用于类似的软件的 设计和实现中。设计和实现中。 理论课内容简介:理论课内容简介: 第一章:绪论 第二章:编译基础(形式语言 、有穷自动机等) 第三章:词法分析 第四章:语法分析 第五章:语法制导翻译和中间代码生成 第七章:程序运行时的存贮分配问题 第八章:代码优化 第九章
4、:目标代码生成 第六章:符号表 实验课内容简介:实验课内容简介: 第一次课:词法分析 (4学时) 第二次课:语法分析 (4学时) 第三次课:词义分析、代码生成 (4学时) 第四次课:小型C语言编译器设计(4学时) 详细实验内容请见实验要求和实验指导书 9 教材:教材:编译原理编译原理(第(第2版),张素琴、吕映芝、蒋维杜、戴桂版),张素琴、吕映芝、蒋维杜、戴桂 兰,清华大学出版社兰,清华大学出版社 2004 参考书:参考书: 教材及主要参考书教材及主要参考书 Compilers: Principles, Technigues, and Tools Alfred V.Aho, Ravi Seth
5、i, Jeffrey D.Ullman, Addison-Wesley,1986. 译著版:机械工业出版社,译著版:机械工业出版社,2003,李建中,姜守旭译。,李建中,姜守旭译。(龙书)龙书) 中文名:编译原理技术和工具中文名:编译原理技术和工具 Modern Compiler Implementation in Java Modern Compiler Implementation in C Andrew W.Appel,人民邮电出版社影印,人民邮电出版社影印,2005 (虎书)(虎书) 中文名:现代编译原理中文名:现代编译原理 Advanced Compiler Design and I
6、mplementation Steven S. Muchnick, 1997. 机械工业出版社影印机械工业出版社影印,2003 (鲸书)(鲸书) 中文名:高级编译器设计与实现中文名:高级编译器设计与实现 内地 内地 陈火旺(国防科大版)陈火旺(国防科大版) 陈意云(中国科技大学版)陈意云(中国科技大学版) 王生原等(人民邮电版)王生原等(人民邮电版) 王生原等(清华大学第三版)王生原等(清华大学第三版) 主要参考书主要参考书 11 第一章绪论第一章绪论 n编译器就是一个编译器就是一个程序程序,它,它读入读入用某种语言用某种语言 编写的源程序,并编写的源程序,并翻译翻译成一个成一个与之等价与之等
7、价的的 另一种语言编写的源程序。另一种语言编写的源程序。 编译器编译器源程序源程序 目标程序目标程序 错误信息错误信息 Fortran、 Pascal、 Java、 C . 另一种程序另一种程序 设计语言、设计语言、 汇编语汇编语 言、机言、机 器语言器语言 1.1什么是编译程序什么是编译程序 什么是编译程序什么是编译程序 编译程序编译程序通常通常是是从较高级语言的程序翻译从较高级语言的程序翻译 至较低级语言的程序至较低级语言的程序,如,如 C 代码 汇编代码a C compiler C+ 代码 汇编代码a C+ compiler C+ 代码 C代码 another C+ compiler J
8、ava 代码 Bytecode代码 a Java compiler 13 1.2编译过程概述编译过程概述 编译程序的工作,从输入源程序开始,到输出目编译程序的工作,从输入源程序开始,到输出目 标程序结束,与自然语言之间的翻译有很多相似之处。标程序结束,与自然语言之间的翻译有很多相似之处。 一段英文翻译成中文,一段英文翻译成中文, 需经下列步骤:需经下列步骤: 识别出句子中的单词识别出句子中的单词 分析句子的语法结构分析句子的语法结构 根据句子的含义进行初步分析根据句子的含义进行初步分析 对译文进行修饰对译文进行修饰 写出最后的译文写出最后的译文 编译程序编译程序 词法分析词法分析 代码优化代码
9、优化 语法分析语法分析 语义分析及中语义分析及中 间代码生成间代码生成 目标代码生成目标代码生成 构成编译程构成编译程 序各个阶段序各个阶段 I am a teacher. 14 编译器的各个阶段:编译器的各个阶段: 编译器是分编译器是分 阶段执行的。阶段执行的。 每个阶段将源程每个阶段将源程 序从一种表示转序从一种表示转 换成另一种表示换成另一种表示 源程序源程序 词法分析器词法分析器 错错 误误 处处 理理 器器 符符 号号 管管 理理 表表 语法分析器语法分析器 语义分析器语义分析器 中间代码生成器中间代码生成器 代码优化器代码优化器 代码生成器代码生成器 编译的各编译的各 个阶段个阶段
10、 15 各分析阶段各分析阶段 随着编译器各个阶段的进展,源程序的内部表示不随着编译器各个阶段的进展,源程序的内部表示不 断地发生变化。断地发生变化。 以以a=b+c *d为例为例 1。词法分析。词法分析 读入源程序读入源程序 完成的任务:完成的任务: 识别出单词:识别出单词: a、=、b、+、c 、 *、 、 d 并用记号方式表示识别出的单词并用记号方式表示识别出的单词 关键字、标识关键字、标识 符、常数、算符、常数、算 符和界符符和界符 例:例:25表示表示a、b、c、d;36:;:;2:;:;31: :* 记号表示逻辑记号表示逻辑 上相关的字符上相关的字符 序列,常用整序列,常用整 数来表
11、示数来表示 上述单词表示为:上述单词表示为:(25,a),(36,=),(25,b),(32,+),(25,c),(31,*), (25,d) n程序文本程序文本If x = y then z := 1 else z := 2; 经经词法分析,变成一个个单词词法分析,变成一个个单词 nif, x, =, y, then, z, :=, 1, else, z, :=, 2, ; n语言的单词符号是由语言的单词符号是由词法规则词法规则所确定的。所确定的。词法词法 规则规则规定了字母表中哪样的字符串是一个单词规定了字母表中哪样的字符串是一个单词 符号。符号。 又又例例, , 从左至右扫描字符流的源程
12、序从左至右扫描字符流的源程序、分解构成源、分解构成源 程序的字符串,程序的字符串,识别出识别出(拼拼)一个个的一个个的单词单词 (符号)(符号) 单词符号是语言中具有独立意义的最基本单词符号是语言中具有独立意义的最基本 结构。多数程序语言中,结构。多数程序语言中,单词单词符号一般符号一般 包括包括 各类型的各类型的常数、保留字、标识符常数、保留字、标识符 、运算符、界符、运算符、界符等等。等等。 词法分析词法分析第一步识别单词第一步识别单词 position := initial + rate * 60; 单词类型单词类型单词值单词值 标识符标识符1(id1) position 算符算符(赋值
13、赋值) := 标识符标识符2(id2) initial 算符算符(加加) + 标识符标识符3(id3) rate 算符算符(乘乘) * 整数整数 60 分号分号 ; 词法分析词法分析 19 语法分析语法分析 在词法分析的基础上,根据语言的语法规则,在词法分析的基础上,根据语言的语法规则, 把单词符号串组成各类语法单位把单词符号串组成各类语法单位. 具体的说,语法分析是在单词流的基础上建立具体的说,语法分析是在单词流的基础上建立 一个层次结构一个层次结构-建立语法树建立语法树 赋值语句赋值语句 标识符标识符 = 表达式表达式 id1表达式表达式 标识符标识符 id2 +表达式表达式 表达式表达式
14、 * 标识符标识符 id3 表达式表达式 整数整数 60 语法分析语法分析 举例举例 id1 := id2 + id3 * 60 ; (Pascal)语法规则)语法规则 :=“:=” :=“+” :=“*” :=“(”“)” := := := 赋值语句赋值语句 标识符标识符表达式表达式 表达式表达式+ 表达式表达式表达式表达式 标识符标识符整数整数 标识符标识符 := 表达式表达式 * id1:=id2+id3*60 := + 60 * id1 id2 id3 23 语义分析阶段语义分析阶段 语义分析利用语法分析阶段确定的层次结构来识别语义分析利用语法分析阶段确定的层次结构来识别 表达式和语句
15、中的操作信息及类型信息表达式和语句中的操作信息及类型信息 = + a b * c d temp1=c*d temp2=b+temp1 temp1 temp2 a=temp2 语义分析语义分析 n 句子的结构理解了,句子的结构理解了,扑捉它的扑捉它的“含义含义” 如:杰克说杰瑞把他的作业落在了家里。如:杰克说杰瑞把他的作业落在了家里。 “他的他的”是谁的?是谁的? 又:杰克说杰克把他的作业落在了家里。又:杰克说杰克把他的作业落在了家里。 几个杰克?几个杰克? n杰克把她的作业落在了家里。杰克把她的作业落在了家里。 (杰克是男生)(杰克是男生)“杰克杰克”和和“她的她的”不一致。不一致。 “杰克杰
16、克”和和“他的他的”才匹配才匹配 语义分析语义分析 26 中间代码生成阶段中间代码生成阶段 本阶段将产生源程序的一个显式中间表示本阶段将产生源程序的一个显式中间表示 这种中间表示可以看成是某种抽象的程这种中间表示可以看成是某种抽象的程 序,通常是与平台无关的序,通常是与平台无关的 其重要性质:其重要性质:1.易于产生易于产生 2.易于翻译成目标程序易于翻译成目标程序 下面是用下面是用三地址码三地址码(四元式)(四元式)表示的例子:表示的例子: temp1=c*d temp2=b+temp1 a=temp2 (* , c , d , tempt1) (+ , b, tempt1 , tempt2
17、) (= , tempt2 , , a) id1:= id2 + id3 * 60 (1)(inttoreal, 60, ,t1) (2)(*,id3,t1,t2) (3)(+,id2,t2,t3) (4)(:=,t3,id1) 28 代码优化阶段代码优化阶段 对代码进行变换对代码进行变换以使得编译产生的目标代码更高效以使得编译产生的目标代码更高效 (执行速度更快)(执行速度更快)。 对上面中间代码进行优化处理后,产生如对上面中间代码进行优化处理后,产生如 下的代码:下的代码: temp1=c*d a=b+temp1 temp1=c*d temp2=b+temp1 a=temp2 如下程序 语
18、法分析结果 j = 2 * i + 1; if (j = n) j = 2 * i + 3; return aj; t1 = 2 * i t2 = t1 + 1 j = t2 t3 = j n if t3 goto L0 t4 = 2 * i t5 = t4 + 3 j = t5 L0: t6 = aj return t6 t1 = 2 * i t2 = t1 + 1 j = t2 t3 = j n if t3 goto L0 t4 = 2 * i t5 = t4 + 3 j = t5 L0: t6 = aj return t6 t1 = 2 * i j = t1 + 1 t3 = j n i
19、f t3 goto L0 j = t1 + 3 L0: t6 = aj return t6 代码优化代码优化 代码优化代码优化 id1:= id2 + id3 * 60 (1)(inttoreal60-t1) (2)( * id3 t1t2) (3)( +id2t2t3) (4)( :=t3-id1) 变换变换 (1) ( *id3 60.0 t1) ( 2)()( + id2 t1 id1) 32 代码生成阶段代码生成阶段 生成目标机机器代码或汇编代码生成目标机机器代码或汇编代码 (*,id360.0 t1) (+,id2t1id1) movf id3,R2 mulf #60.0,R2 mo
20、vf id2,R1 addf R2,R1 movf R1,id1 nExample: a in R0, i in R1, n in R2 t1 = 2 * i j = t1 + 1 t3 = j n if t3 goto L0 j = t1 + 3 L0: t6 = aj return t6 sll R1, 1, R1 add R1, 1, J cmp J,R2 blt .LL3 add R1, 3, J .LL3: ld R0+J, Rt retr 代码生成代码生成 n记录记录源程序中使用的源程序中使用的标识符标识符 n收集收集每个标识符的各种每个标识符的各种属性信息属性信息 n普通变量:普
21、通变量:类型、作用域、分配存储信息类型、作用域、分配存储信息 n函数或过程:函数或过程:参数个数、类型、传递方法参数个数、类型、传递方法 返回值类型返回值类型 符号表管理符号表管理(登录,查找)登录,查找) 1.3 符号表 符号表 35 符号表管理符号表管理 int a,b; float e,f char ch1,ch2; 为什么要先说明为什么要先说明? 定义了变量的类型,也就规定了变量 定义了变量的类型,也就规定了变量 在内存中的存放形式,在其上所能进行的在内存中的存放形式,在其上所能进行的 运算运算 解决符号地址到存贮地址上的映射解决符号地址到存贮地址上的映射 36 编译器的一个基本功能是
22、编译器的一个基本功能是记录源程序中使用记录源程序中使用 的标识符的标识符 并将它们并将它们记载到符号表中记载到符号表中。 符号表是一个数据结构。符号表是一个数据结构。 每个标识符在符号表中都有每个标识符在符号表中都有 一条记录一条记录 名字名字 记号记号 类型类型种属种属 addr id1(25) id2(25) b a 例:例:int a,b; int简变简变 0 4 并并收集与每个标识符相关的各种属收集与每个标识符相关的各种属 性信息,性信息, int 简变简变 37 在编译的各个阶段都会发现源程序中的错误,在编译的各个阶段都会发现源程序中的错误, 1.4错误检测与报告错误检测与报告 为了
23、使编译器能继续运行,以检测出源程序中为了使编译器能继续运行,以检测出源程序中 更多的错误,在检测到错误后,必须以合适的方式更多的错误,在检测到错误后,必须以合适的方式 进行错误处理。进行错误处理。 error 38 小结:小结: 编译器编译器 的各个的各个 阶段阶段 源程序源程序 词法分析器词法分析器 错错 误误 处处 理理 器器 符符 号号 管管 理理 表表 语法分析器语法分析器 语义分析器语义分析器 中间代码生成器中间代码生成器 代码优化器代码优化器 代码生成器代码生成器 39 编译的前端和后端编译的前端和后端 前端包括词法分析、语法分析、语前端包括词法分析、语法分析、语 义分析,以及相关
24、的错误处理和符号表义分析,以及相关的错误处理和符号表 的建立的建立 前端依赖于源程序并在很大程度上前端依赖于源程序并在很大程度上 独立于目标机器。独立于目标机器。 40 后端主要包括代码优化、代码生成和相后端主要包括代码优化、代码生成和相 关错误处理。关错误处理。 后端依赖于目标机器。后端依赖于目标机器。 后端处理对象是由前端产生的结果,即中后端处理对象是由前端产生的结果,即中 间代码间代码 前端生成与平台无关的字节码前端生成与平台无关的字节码 后端是由与平台有关的解释器对所生成后端是由与平台有关的解释器对所生成 的字节码文件进行解释执行的字节码文件进行解释执行 Java语言的编译采用的是前端
展开阅读全文