编译原理课件(龙书为教材)PPT文档格式.ppt
- 文档编号:16089789
- 上传时间:2022-11-19
- 格式:PPT
- 页数:696
- 大小:6.82MB
编译原理课件(龙书为教材)PPT文档格式.ppt
《编译原理课件(龙书为教材)PPT文档格式.ppt》由会员分享,可在线阅读,更多相关《编译原理课件(龙书为教材)PPT文档格式.ppt(696页珍藏版)》请在冰豆网上搜索。
开课目的及应用前景:
介绍设计与构造程序设计语介绍设计与构造程序设计语言言编译程序编译程序的的原理与方法原理与方法源程序源程序编译编译程序程序目标程序目标程序连接连接可可执行程序执行程序预备知识:
预备知识:
形式语言与自动机、形式语言与自动机、两门以上的高两门以上的高级程序设计语级程序设计语言言汇编语言汇编语言数据结构等数据结构等How?
11/5/2022计算机学院3辛明影内容简介:
内容简介:
第一章:
编译器的基本结构第二章:
高级语言及其语法描述第三章:
词法分析器第四章:
语法分析技术第五章:
语法制导翻译的主要概念及中间代码第六章:
程序运行时的存贮分配问题第七章:
代码优化第八章:
目标代码生成11/5/2022计算机学院4辛明影教学设计:
教学设计:
(1)自顶向下,逐步求精的方法自顶向下,逐步求精的方法
(2)问题驱动问题驱动(3)将课程设计成一个应用平台将课程设计成一个应用平台(4)用实验拓广课堂教学用实验拓广课堂教学(5)精讲多练精讲多练(6)承前启后承前启后教学目标:
教学目标:
11/5/2022计算机学院5辛明影第一章绪论第一章绪论n编译器就是一个编译器就是一个程序程序,它,它读入读入用某种语言用某种语言编写的源程序,并编写的源程序,并翻译翻译成一个成一个与之等价与之等价的的另一种语言编写的源程序。
另一种语言编写的源程序。
编译器编译器源程序源程序目标程序目标程序错误信息错误信息Fortran、Pascal、Java、C.另另一种程序一种程序设计语言、设计语言、汇编语汇编语言、机言、机器语言器语言1.1什么叫编译程序什么叫编译程序11/5/2022计算机学院6辛明影1.2编译过程概述编译过程概述编译程序的工作,从输入源程序开始,到输出目编译程序的工作,从输入源程序开始,到输出目标程序结束,与自然语言之间的翻译有很多相似之处。
标程序结束,与自然语言之间的翻译有很多相似之处。
一段英文翻译成中文,一段英文翻译成中文,需经下列步骤:
需经下列步骤:
识别出句子中的单词识别出句子中的单词分析句子的语法结构分析句子的语法结构根据句子的含义进行初步分析根据句子的含义进行初步分析对对译文进行修饰译文进行修饰写出最后的译文写出最后的译文编译程序编译程序词法分析词法分析代码优化代码优化语法分析语法分析语义分析及中语义分析及中间代码生成间代码生成目标代码生成目标代码生成构成编译程构成编译程序各个阶段序各个阶段Iamaexperiencedteacher.11/5/2022计算机学院7辛明影编译器的各个阶段:
编译器的各个阶段:
编译器是分编译器是分阶段执行的。
阶段执行的。
每个阶段将源程每个阶段将源程序从一种表示转序从一种表示转换成另一种表示换成另一种表示源程序源程序词法分析器词法分析器错错误误处处理理器器符符号号管管理理表表语法分析器语法分析器语义分析器语义分析器中间代码生成器中间代码生成器代码优化器代码优化器代码生成器代码生成器编译的各编译的各个阶段个阶段11/5/2022计算机学院8辛明影各分析阶段各分析阶段随着编译器各个阶段的进展,源程序的内部表示不随着编译器各个阶段的进展,源程序的内部表示不断地发生变化。
断地发生变化。
以以a=b+c*d为例为例1。
词法分析。
词法分析读入源程序读入源程序完成的任务:
完成的任务:
识别出单词:
a、=、b、+、c、*、d并用并用记号方式表示识别出的单词记号方式表示识别出的单词关键字、标识关键字、标识符、常数、算符、常数、算符和界符符和界符例:
例:
25表示表示a、b、c、d;
36:
;
:
2:
31:
*记号表示逻辑记号表示逻辑上相关的字符上相关的字符序列,常用整序列,常用整数来表示数来表示上述单词表示为:
上述单词表示为:
(25,a),(36,_),(25,b),(32,_),(25,c),(31,_),(25,d)11/5/2022计算机学院9辛明影语法分析语法分析在词法分析的基础上,根据语言的语法规则,在词法分析的基础上,根据语言的语法规则,把单词符号串组成各类语法单位把单词符号串组成各类语法单位.具体的说,语法分析是在单词流的基础上建立具体的说,语法分析是在单词流的基础上建立一个层次结构一个层次结构-建立语法树建立语法树赋值赋值语句语句标识符标识符=表达式表达式a表达式表达式标识符标识符b+表达式表达式表达式表达式*标识符标识符c表达式表达式标识符标识符d11/5/2022计算机学院10辛明影语义分析阶段语义分析阶段语义分析利用语法分析阶段确定的层次结构来识别语义分析利用语法分析阶段确定的层次结构来识别表达式和语句中的操作信息及类型信息表达式和语句中的操作信息及类型信息=+ab*cdtemp1=c*dtemp2=b+temp1temp1temp2a=temp211/5/2022计算机学院11辛明影中间代码生成阶段中间代码生成阶段本本阶段将产生源程序的一个显式中间表示阶段将产生源程序的一个显式中间表示这种中间表示可以看成是某种抽象的程这种中间表示可以看成是某种抽象的程序,通常是与平台无关的序,通常是与平台无关的其其重要性质:
重要性质:
1.易于产生易于产生2.易于翻译成目标程序易于翻译成目标程序下面是用下面是用三地址码三地址码和和四元式四元式表示的例子:
表示的例子:
temp1=c*dtemp2=b+temp1a=temp2(*,c,d,tempt1)(+,b,tempt1,tempt2)(=,tempt2,a)11/5/2022计算机学院12辛明影代码优化阶段代码优化阶段试图改进中间代码,以产生执行速度较快的试图改进中间代码,以产生执行速度较快的机器代码机器代码对上面中间代码进行优化处理后,产生如对上面中间代码进行优化处理后,产生如下的代码:
下的代码:
temp1=c*da=b+temp1temp1=c*dtemp2=b+temp1a=temp211/5/2022计算机学院13辛明影代码生成阶段代码生成阶段生成可重定位的机器代码或汇编代码生成可重定位的机器代码或汇编代码MovfR2,cMultR2,dMovfR1,bAddfR2,R1Movfa,R211/5/2022计算机学院14辛明影1.3符号表管理符号表管理inta,b;
floate,fcharch1,ch2;
为什么要先说明为什么要先说明?
定义了变量的类型,也就规定了变量定义了变量的类型,也就规定了变量在内存中的存放形式,在其上所能进行的运在内存中的存放形式,在其上所能进行的运算算解决符号地址到存贮地址上的映射解决符号地址到存贮地址上的映射11/5/2022计算机学院15辛明影编译器的一个基本功能是编译器的一个基本功能是记录源程序中使用记录源程序中使用的标识符的标识符并将并将它们它们记载到符号表中记载到符号表中。
符号表是一个数据结构。
每个标识符在符号表中都有每个标识符在符号表中都有一条记录一条记录名字名字记号记号类型类型种属种属addrid1(25)id2(25)ba例:
inta,b;
int简变简变04并并收集与每个标识符相关的各种属收集与每个标识符相关的各种属性信息,性信息,int简变简变11/5/2022计算机学院16辛明影符号表的接口:
符号表的接口:
符号表的作用就是存放字符串或词素符号表的作用就是存放字符串或词素当当一个字符串或词素被保存时,与之相对一个字符串或词素被保存时,与之相对应的记号也被保存应的记号也被保存符号表上的操作:
符号表上的操作:
Insert(s,t):
将符号串将符号串s和记号和记号t插入符号插入符号表,返回相应表项的指针表,返回相应表项的指针Lookup(s):
在符号表中查找字符串在符号表中查找字符串s,查找查找成功返回相应指针,否则返回成功返回相应指针,否则返回011/5/2022计算机学院17辛明影关键字的处理关键字的处理通常情况下,将关键字存在符号表中,通常情况下,将关键字存在符号表中,作为符号表的初值。
作为符号表的初值。
当当词法分析程序识别出一个标识符词法分析程序识别出一个标识符s后,后,用用lookup(s)查找符号表,如果是关键字,查找符号表,如果是关键字,返回相应的记号;
如果是变量名,返回返回相应的记号;
如果是变量名,返回记号记号id11/5/2022计算机学院18辛明影符号表的实现符号表的实现固定固定长长标识符:
采用前面的结构标识符:
采用前面的结构不定不定长长标识符:
使用单独的数组标识符:
使用单独的数组lexemesifeosinteospositioneosinitialeosIf(12)Int(13)Id1(25)Id2(25)存放标识符的字符串存放标识符的字符串,符号表中存放标识符号表中存放标识符在符在lexemes的起始位置和相应记号的起始位置和相应记号11/5/2022计算机学院19辛明影1.41.4编译各阶段的分组编译各阶段的分组一、前端和后端一、前端和后端前端包括词法分析、词法分析、语前端包括词法分析、词法分析、语义分析,以及相关的错误处理和符号表义分析,以及相关的错误处理和符号表的建立的建立前端依赖于源程序并在很大程度上前端依赖于源程序并在很大程度上独立于目标机器。
独立于目标机器。
11/5/2022计算机学院20辛明影后端主要包括代码优化、代码生成和相后端主要包括代码优化、代码生成和相关错误处理。
关错误处理。
后端依赖于目标机器。
后端处理对象是由前端产生的结果,即中后端处理对象是由前端产生的结果,即中间代码间代码前端生成与平台无关的字节码前端生成与平台无关的字节码后端是由与平台有关的解释器对所生成后端是由与平台有关的解释器对所生成的字节码文件进行解释执行的字节码文件进行解释执行Java语言的编译采用的是前端后端方式。
语言的编译采用的是前端后端方式。
11/5/2022计算机学院21辛明影二、编译的遍二、编译的遍编译的若干阶段通常是以一遍来实现编译的若干阶段通常是以一遍来实现的,每遍读一次输入文件、产生一个输出的,每遍读一次输入文件、产生一个输出文件。
文件。
11/5/2022计算机学院22辛明影在在编译的各个阶段都会发现源程序中的错误,编译的各个阶段都会发现源程序中的错误,1.5错误检测与报告错误检测与报告为了使编译器能继续运行,以检测出源程序中为了使编译器能继续运行,以检测出源程序中更多的错误,在检测到错误后,必须以合适的方式更多的错误,在检测到错误后,必须以合适的方式进行错误处理。
进行错误处理。
error11/5/2022计算机学院23辛明影第二章第二章高级语言高级语言及其语法描述及其语法描述内容简介:
本本章章概述程序设计语言的结构概述程序设计语言的结构2.1程序语言的定义程序语言的定义任何语言实现的基础是语言定义。
任何语言实现的基础是语言定义。
语言的定义决定了该语言具有什么样的语言功能、什么样的数据结构、什么样什么样的程序结构、的程序结构、以及具体的使用形式等细以及具体的使用形式等细节问题。
节问题。
和主要和主要的共同特征,的共同特征,并介绍程序设计语言主要语并介绍程序设计语言主要语句的文法描述与形式定义。
句的文法描述与形式定义。
11/5/2022计算机学院25辛明影对于编译程序设计者来说:
语言定义对于编译程序设计者来说:
语言定义就是具体实现的理论依据。
就是具体实现的理论依据。
对于语言用户来说:
语言定义就是对于语言用户来说:
语言定义就是一本用户手册。
一本用户手册。
2.1.12.1.1语法语法语言的语法是指这样一组语言的语法是指这样一组规则规则,用它,用它可产生一个程序。
可产生一个程序。
规则:
词法规则词法规则语法规则语法规则11/5/2022计算机学院26辛明影词法规则是指单词符号的形成规则字母表就是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课件 教材