《第1章-编译程序概论.ppt》由会员分享,可在线阅读,更多相关《第1章-编译程序概论.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1本课程的地位本课程的地位n n计算机科学与技术最重要的专业课之一,掌握编译计算机科学与技术最重要的专业课之一,掌握编译计算机科学与技术最重要的专业课之一,掌握编译计算机科学与技术最重要的专业课之一,掌握编译方法和技术是每一个优秀计算机软件专业人员的必方法和技术是每一个优秀计算机软件专业人员的必方法和技术是每一个优秀计算机软件专业人员的必方法和技术是每一个优秀计算机软件专业人员的必备素质。备素质。备素质。备素质。n n很很很很多多多多被被被被称称称称为为为为程程程程序序序序设设设设计计计计大大大大师师师师的的的的人人人人都都都都是是是是编编编编译译译译领领领领域域域域的的的的高高高高手手手手.
2、写写写写出出出出第第第第一一一一个个个个微微微微型型型型机机机机上上上上运运运运行行行行的的的的BasicBasicBasicBasic语语语语言言言言的的的的比比比比尔尔尔尔盖盖盖盖茨茨茨茨,设设设设计计计计出出出出DelphiDelphiDelphiDelphi的的的的BorlandBorlandBorlandBorland的的的的“世世世世界界界界上上上上最最最最厉厉厉厉害害害害的的的的程程程程序序序序员员员员”,”,”,”,SunSunSunSun的的的的JAVAJAVAJAVAJAVA之之之之父父父父,贝尔实验室的贝尔实验室的贝尔实验室的贝尔实验室的C+C+C+C+之父等等。之父等等
3、。之父等等。之父等等。n n学习编译程序的构造原理和实现技术,不仅可以掌握编译学习编译程序的构造原理和实现技术,不仅可以掌握编译学习编译程序的构造原理和实现技术,不仅可以掌握编译学习编译程序的构造原理和实现技术,不仅可以掌握编译程序本身的实现技术,同时也能够提高对程序设计语言的程序本身的实现技术,同时也能够提高对程序设计语言的程序本身的实现技术,同时也能够提高对程序设计语言的程序本身的实现技术,同时也能够提高对程序设计语言的理解,提高语言的设计能力,提高开发大型软件的能力。理解,提高语言的设计能力,提高开发大型软件的能力。理解,提高语言的设计能力,提高开发大型软件的能力。理解,提高语言的设计能
4、力,提高开发大型软件的能力。2学习任务学习任务n n掌握程序设计语言编译程序构造的一般原理、基本掌握程序设计语言编译程序构造的一般原理、基本掌握程序设计语言编译程序构造的一般原理、基本掌握程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。了设计方法、主要实现技术和一些自动构造工具。了设计方法、主要实现技术和一些自动构造工具。了设计方法、主要实现技术和一些自动构造工具。了解将高级程序设计语言源程序翻译成计算机能处理解将高级程序设计语言源程序翻译成计算机能处理解将高级程序设计语言源程序翻译成计算机能处理解将高级程序设计语言源程序翻译成计算机能处理的目标代码的整个过程
5、的目标代码的整个过程的目标代码的整个过程的目标代码的整个过程。n n相关知识:程序设计语言、计算机体系组成原理、相关知识:程序设计语言、计算机体系组成原理、相关知识:程序设计语言、计算机体系组成原理、相关知识:程序设计语言、计算机体系组成原理、数据结构、操作系统等。数据结构、操作系统等。数据结构、操作系统等。数据结构、操作系统等。3教材教材n n教材:教材:教材:教材:编译原理编译原理编译原理编译原理,张素琴,张素琴,张素琴,张素琴 等编著,清华大学出版社等编著,清华大学出版社等编著,清华大学出版社等编著,清华大学出版社n n参考书目:参考书目:参考书目:参考书目:编编编编译译译译程程程程序序
6、序序设设设设计计计计原原原原理理理理,杜杜杜杜淑淑淑淑敏敏敏敏 等等等等编编编编著著著著,北北北北京京京京大大大大学学学学出版社出版社出版社出版社编译原理教程编译原理教程编译原理教程编译原理教程,胡元义,胡元义,胡元义,胡元义 等编著,西安电子科技等编著,西安电子科技等编著,西安电子科技等编著,西安电子科技大学出版社大学出版社大学出版社大学出版社4成绩考核方法成绩考核方法 平时成绩占平时成绩占平时成绩占平时成绩占50%50%50%50%期末考试成绩占期末考试成绩占期末考试成绩占期末考试成绩占50%50%50%50%。平时成绩为:平时成绩为:平时成绩为:平时成绩为:课堂考勤课堂考勤课堂考勤课堂考
7、勤5%5%5%5%平时作业平时作业平时作业平时作业15%15%15%15%期中考试期中考试期中考试期中考试30%30%30%30%5第1章 编译程序概论n n教学要求:教学要求:教学要求:教学要求:本章讲解编译程序、本章讲解编译程序、本章讲解编译程序、本章讲解编译程序、解释程序的基解释程序的基解释程序的基解释程序的基本概念,概述编译过程,介绍编译程序的逻辑结本概念,概述编译过程,介绍编译程序的逻辑结本概念,概述编译过程,介绍编译程序的逻辑结本概念,概述编译过程,介绍编译程序的逻辑结构和编译程序的组织形式。要求理解编译程序、构和编译程序的组织形式。要求理解编译程序、构和编译程序的组织形式。要求理
8、解编译程序、构和编译程序的组织形式。要求理解编译程序、解释程序和遍的基本概念;掌握编译过程各阶段解释程序和遍的基本概念;掌握编译过程各阶段解释程序和遍的基本概念;掌握编译过程各阶段解释程序和遍的基本概念;掌握编译过程各阶段的任务和编译程序逻辑结构及其各部分的基本功的任务和编译程序逻辑结构及其各部分的基本功的任务和编译程序逻辑结构及其各部分的基本功的任务和编译程序逻辑结构及其各部分的基本功能。能。能。能。n n教学重点:教学重点:教学重点:教学重点:编译程序工作的基本过程及其各阶段编译程序工作的基本过程及其各阶段编译程序工作的基本过程及其各阶段编译程序工作的基本过程及其各阶段的基本任务,编译程序
9、总体框架。的基本任务,编译程序总体框架。的基本任务,编译程序总体框架。的基本任务,编译程序总体框架。6n n基本概念基本概念基本概念基本概念机器语言:能够被计算机的硬件系统直接执行机器语言:能够被计算机的硬件系统直接执行机器语言:能够被计算机的硬件系统直接执行机器语言:能够被计算机的硬件系统直接执行的指令程序。的指令程序。的指令程序。的指令程序。汇编语言:将硬件指令用一些助记符表示。如汇编语言:将硬件指令用一些助记符表示。如汇编语言:将硬件指令用一些助记符表示。如汇编语言:将硬件指令用一些助记符表示。如ADDADDADDADD表示加法操作,表示加法操作,表示加法操作,表示加法操作,SUBSUB
10、SUBSUB表示减法操作等等表示减法操作等等表示减法操作等等表示减法操作等等 高级语言:使用便于理解的自然语言。高级语言:使用便于理解的自然语言。高级语言:使用便于理解的自然语言。高级语言:使用便于理解的自然语言。7n n编译程序(器):接受某种语言的源语言程序后,编译程序(器):接受某种语言的源语言程序后,编译程序(器):接受某种语言的源语言程序后,编译程序(器):接受某种语言的源语言程序后,将它改造成另一种逻辑上等价的目标语言程序。将它改造成另一种逻辑上等价的目标语言程序。将它改造成另一种逻辑上等价的目标语言程序。将它改造成另一种逻辑上等价的目标语言程序。源语言:像Pascal 或c那样的
11、高级语言目标语言:像汇编语言 或机器语言那样的低级语言8需预处理的源程序需预处理的源程序预处理程序预处理程序源程序源程序编译程序编译程序汇编程序汇编程序装配装配/连接编辑程序连接编辑程序目标汇编程序目标汇编程序可再装配的机器代码可再装配的机器代码绝对机器代码绝对机器代码可再装配目标文件可再装配目标文件高级语言程序的高级语言程序的高级语言程序的高级语言程序的处理过程处理过程处理过程处理过程9表表 格格 管管 理理词法分析词法分析语法分析语法分析语义分析语义分析中间代码生成中间代码生成代码优化代码优化目标代码生成目标代码生成出出 错错 处处 理理源程序源程序目标程序目标程序编译的各个阶段编译的各个
12、阶段编译的各个阶段编译的各个阶段10词法分析词法分析词法分析的功能是从左到右读入源程序的每个字符,词法分析的功能是从左到右读入源程序的每个字符,词法分析的功能是从左到右读入源程序的每个字符,词法分析的功能是从左到右读入源程序的每个字符,对构成源程序的字符流进行扫描和分解,从而识别对构成源程序的字符流进行扫描和分解,从而识别对构成源程序的字符流进行扫描和分解,从而识别对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也叫单词符号或符号)。出一个个单词(也叫单词符号或符号)。出一个个单词(也叫单词符号或符号)。出一个个单词(也叫单词符号或符号)。依据:语言的构词规则。依据:语言的构词规则。
13、依据:语言的构词规则。依据:语言的构词规则。单词:逻辑上紧密相连的一组字符,这些字符具有单词:逻辑上紧密相连的一组字符,这些字符具有单词:逻辑上紧密相连的一组字符,这些字符具有单词:逻辑上紧密相连的一组字符,这些字符具有集体含义。集体含义。集体含义。集体含义。如:标识符、保留字(关键字或基本字)、算符、如:标识符、保留字(关键字或基本字)、算符、如:标识符、保留字(关键字或基本字)、算符、如:标识符、保留字(关键字或基本字)、算符、界符等。界符等。界符等。界符等。(第四章)11例例例例.某源程序片断如下:某源程序片断如下:某源程序片断如下:某源程序片断如下:beginbegin var sum
14、,first,count:real;var sum,first,count:real;sum:=first+count*10 sum:=first+count*10end.end.1.1.保留字保留字保留字保留字beginbegin2.2.保留字保留字保留字保留字varvar3.3.标识符标识符标识符标识符sumsum4.4.逗号逗号逗号逗号,5.5.标识符标识符标识符标识符firstfirst6.6.逗号逗号逗号逗号,7.7.标识符标识符标识符标识符countcount8.8.冒号冒号冒号冒号:9.9.保留字保留字保留字保留字realreal10.10.10.10.分号分号分号分号;11.1
15、1.标识符标识符标识符标识符sumsum12.12.赋值号赋值号赋值号赋值号:=:=13.13.标识符标识符标识符标识符firstfirst14.14.加号加号加号加号+15.15.标识符标识符标识符标识符countcount16.16.乘号乘号乘号乘号*17.17.整数整数整数整数101018.18.保留字保留字保留字保留字endend19.19.界符界符界符界符.12语法分析语法分析语法分析的功能是将单词序列分解成各类语法短语法分析的功能是将单词序列分解成各类语法短语法分析的功能是将单词序列分解成各类语法短语法分析的功能是将单词序列分解成各类语法短语(也叫语法单位,句子),确定整个输入串是
16、语(也叫语法单位,句子),确定整个输入串是语(也叫语法单位,句子),确定整个输入串是语(也叫语法单位,句子),确定整个输入串是否构成一个语法上正确的程序。否构成一个语法上正确的程序。否构成一个语法上正确的程序。否构成一个语法上正确的程序。依据:语言的语法规则依据:语言的语法规则依据:语言的语法规则依据:语言的语法规则,即描述程序结构的规则。即描述程序结构的规则。即描述程序结构的规则。即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法通过语法分析确定整个输入串是否构成一个语法通过语法分析确定整个输入串是否构成一个语法通过语法分析确定整个输入串是否构成一个语法上正确的程序。上正确的程
17、序。上正确的程序。上正确的程序。(第5,6,7章)13语句的语句的语句的语句的递归定义递归定义递归定义递归定义:1.1.1.1.标识符标识符标识符标识符:=:=:=:=表达式表达式表达式表达式 是语句。是语句。是语句。是语句。2.2.2.2.while(while(while(while(表达式表达式表达式表达式)do do do do 语句语句语句语句3.3.3.3.if(if(if(if(表达式表达式表达式表达式)then then then then 语句语句语句语句 else else else else 语句语句语句语句4.4.4.4.都是语句。都是语句。都是语句。都是语句。表达式的
18、递归定义:表达式的递归定义:表达式的递归定义:表达式的递归定义:1.1.1.1.任何标识符是表达式。任何标识符是表达式。任何标识符是表达式。任何标识符是表达式。2.2.2.2.任何常数是表达式任何常数是表达式任何常数是表达式任何常数是表达式.3.3.3.3.若表达式若表达式若表达式若表达式1 1 1 1和表达式和表达式和表达式和表达式2 2 2 2是表达式是表达式是表达式是表达式,那么表达式那么表达式那么表达式那么表达式1+1+1+1+表达式表达式表达式表达式2,2,2,2,表达式表达式表达式表达式1 1 1 1*表达式表达式表达式表达式2,(2,(2,(2,(表达式表达式表达式表达式)都是表
19、达式都是表达式都是表达式都是表达式.14赋值语句赋值语句标识符标识符标识符标识符整数整数标识符标识符表达式表达式:=:=表达式表达式+表达式表达式表达式表达式表达式表达式*id1:=id2+id3*10 id1:=id2+id3*10 的语法树的语法树的语法树的语法树id1id1sumsumid2id2firstfirstid3id3countcount101015n n语义分析的功能是审查源程序有无语义错误,语义分析的功能是审查源程序有无语义错误,语义分析的功能是审查源程序有无语义错误,语义分析的功能是审查源程序有无语义错误,为代码生成阶段收集类型信息。为代码生成阶段收集类型信息。为代码生成
20、阶段收集类型信息。为代码生成阶段收集类型信息。n n语义分析主要能识别的语义错误有变量没有声语义分析主要能识别的语义错误有变量没有声语义分析主要能识别的语义错误有变量没有声语义分析主要能识别的语义错误有变量没有声明就使用,变量重复声明,运算对象类型是否明就使用,变量重复声明,运算对象类型是否明就使用,变量重复声明,运算对象类型是否明就使用,变量重复声明,运算对象类型是否匹配等等。匹配等等。匹配等等。匹配等等。语义分析语义分析(第8章)16如:类型检查。如:类型检查。:=:=id1id1+id2id2*id3id31010inttorealinttorealsum:=first+count*10
21、sum:=first+count*10id1id1id2id2id3id317中间代码生成中间代码生成中间代码:一种结构简单、含义明确的记号系统。中间代码:一种结构简单、含义明确的记号系统。中间代码:一种结构简单、含义明确的记号系统。中间代码:一种结构简单、含义明确的记号系统。原则:原则:原则:原则:容易生成;容易生成;容易生成;容易生成;容易将它翻译成目标代码。容易将它翻译成目标代码。容易将它翻译成目标代码。容易将它翻译成目标代码。如四元式如四元式如四元式如四元式:(运算符,运算对象(运算符,运算对象(运算符,运算对象(运算符,运算对象1 1 1 1,运算对象,运算对象,运算对象,运算对象2
22、 2 2 2,结果),结果),结果),结果)将源程序生成一种内部表示形式,这种内部表将源程序生成一种内部表示形式,这种内部表将源程序生成一种内部表示形式,这种内部表将源程序生成一种内部表示形式,这种内部表示形式叫中间代码。示形式叫中间代码。示形式叫中间代码。示形式叫中间代码。(第8章)18如:源程序如:源程序如:源程序如:源程序 sum:=first+count*10sum:=first+count*10生成的四元式可以是:生成的四元式可以是:生成的四元式可以是:生成的四元式可以是:(inttorealinttoreal,1010,-,t1 )t1 )(*(*,id3id3,t1t1,t2 )
23、t2 )(+(+,id2id2,t2t2,t3 )t3 )(:=(:=,t3t3,-,id1)id1)id1id1id2id2id3id319代码优化代码优化(inttorealinttoreal,1010,-,t1 )t1 )(*(*,id3id3,t1t1,t2 )t2 )(+(+,id2id2,t2t2,t3 )t3 )(:=(:=,t3t3,-,id1)id1)(*(*,id3id3,10.010.0,t2 )t2 )(+(+,id2id2,t2t2,id1)id1)(*(*,id3id3,10.010.0,t1 )t1 )(+(+,id2id2,t1t1,id1)id1)目的目的:使
24、目标代码运行时间较短,占用空间较小。使目标代码运行时间较短,占用空间较小。(第8章)20目标代码生成目标代码生成任务任务任务任务:把中间代码变换成特定机器上的绝:把中间代码变换成特定机器上的绝:把中间代码变换成特定机器上的绝:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编对指令代码或可重定位的指令代码或汇编对指令代码或可重定位的指令代码或汇编对指令代码或可重定位的指令代码或汇编指令代码。指令代码。指令代码。指令代码。特点特点特点特点:与硬件系统结构和指令含义有关,:与硬件系统结构和指令含义有关,:与硬件系统结构和指令含义有关,:与硬件系统结构和指令含义有关,涉及到硬件系统功
25、能部件的运用、机器指涉及到硬件系统功能部件的运用、机器指涉及到硬件系统功能部件的运用、机器指涉及到硬件系统功能部件的运用、机器指令的选择、各种数据类型变量的存储空间令的选择、各种数据类型变量的存储空间令的选择、各种数据类型变量的存储空间令的选择、各种数据类型变量的存储空间分配以及寄存器和后缓寄存器的调度等。分配以及寄存器和后缓寄存器的调度等。分配以及寄存器和后缓寄存器的调度等。分配以及寄存器和后缓寄存器的调度等。(第12章)21n n符号表用来记录源程序中出现的标识符,并收集符号表用来记录源程序中出现的标识符,并收集符号表用来记录源程序中出现的标识符,并收集符号表用来记录源程序中出现的标识符,
26、并收集每个标识符的各种属性信息。每个标识符的各种属性信息。每个标识符的各种属性信息。每个标识符的各种属性信息。n n符号表是由若干记录组成的数据结构,每个标识符号表是由若干记录组成的数据结构,每个标识符号表是由若干记录组成的数据结构,每个标识符号表是由若干记录组成的数据结构,每个标识符在表中有一条记录,每条记录有多个域,每个符在表中有一条记录,每条记录有多个域,每个符在表中有一条记录,每条记录有多个域,每个符在表中有一条记录,每条记录有多个域,每个域记载标识符的一个属性。域记载标识符的一个属性。域记载标识符的一个属性。域记载标识符的一个属性。符号表管理(第9章)22表表 格格 管管 理理 程程
27、 序序词法分析程序词法分析程序语法分析程序语法分析程序语义分析程序语义分析程序中间代码生成程序中间代码生成程序代码优化程序代码优化程序目标代码生成程序目标代码生成程序出出 错错 处处 理理 程程 序序源程序源程序目标程序目标程序编译程序的结构编译程序的结构编译程序的结构编译程序的结构23有关名词:有关名词:有关名词:有关名词:前端(前端(前端(前端(front endfront endfront endfront end):):):):主要依赖于源语言而与目标主要依赖于源语言而与目标主要依赖于源语言而与目标主要依赖于源语言而与目标机器无关的编译阶段。如:词法分析、语法分析、机器无关的编译阶段。
28、如:词法分析、语法分析、机器无关的编译阶段。如:词法分析、语法分析、机器无关的编译阶段。如:词法分析、语法分析、语义分析、中间代码生成、部分优化工作、与前语义分析、中间代码生成、部分优化工作、与前语义分析、中间代码生成、部分优化工作、与前语义分析、中间代码生成、部分优化工作、与前端有关的出错处理工作和符号表管理工作。端有关的出错处理工作和符号表管理工作。端有关的出错处理工作和符号表管理工作。端有关的出错处理工作和符号表管理工作。后端(后端(后端(后端(back endback endback endback end):):):):依赖于目标机而一般不依赖依赖于目标机而一般不依赖依赖于目标机而一
29、般不依赖依赖于目标机而一般不依赖于源语言,只与中间代码有关的编译阶段。如:于源语言,只与中间代码有关的编译阶段。如:于源语言,只与中间代码有关的编译阶段。如:于源语言,只与中间代码有关的编译阶段。如:目标代码生成,以及相关出错处理和符号表操作。目标代码生成,以及相关出错处理和符号表操作。目标代码生成,以及相关出错处理和符号表操作。目标代码生成,以及相关出错处理和符号表操作。遍(趟):对源程序或其等价的中间语言程序从遍(趟):对源程序或其等价的中间语言程序从遍(趟):对源程序或其等价的中间语言程序从遍(趟):对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。每一遍扫视头到尾扫视并完
30、成规定任务的过程。每一遍扫视头到尾扫视并完成规定任务的过程。每一遍扫视头到尾扫视并完成规定任务的过程。每一遍扫视可完成上述一个阶段或多个阶段的工作。可完成上述一个阶段或多个阶段的工作。可完成上述一个阶段或多个阶段的工作。可完成上述一个阶段或多个阶段的工作。24编译的几个阶段如何组合,编译程序分成几遍主要影响因素:(1)源语言和机器的特征.(2)机器的情况.多遍比一遍少占内存,逻辑结构清晰一些,但消耗时间较多.25语言处理程序n n解解解解释释释释程程程程序序序序(器器器器):接接接接受受受受某某某某种种种种语语语语言言言言源源源源程程程程序序序序,然然然然后后后后直接解释执行源程序。直接解释执
31、行源程序。直接解释执行源程序。直接解释执行源程序。n n编编编编译译译译程程程程序序序序(器器器器):接接接接受受受受某某某某种种种种语语语语言言言言的的的的源源源源语语语语 言言言言程程程程序序序序后后后后,将将将将它它它它改改改改造造造造成成成成另另另另一一一一种种种种逻逻逻逻辑辑辑辑上上上上等等等等价价价价的的的的目目目目标语言程序。标语言程序。标语言程序。标语言程序。n n两种方法数据处理时间不同?两种方法数据处理时间不同?两种方法数据处理时间不同?两种方法数据处理时间不同?26n n区别区别:是否生成目标代码是否生成目标代码.存储组织不同存储组织不同 解释程序比较慢解释程序比较慢,空间开销比较大空间开销比较大