编译进程概述与编译程序的结构希赛教育基础学院.docx
- 文档编号:1222141
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:15
- 大小:167.52KB
编译进程概述与编译程序的结构希赛教育基础学院.docx
《编译进程概述与编译程序的结构希赛教育基础学院.docx》由会员分享,可在线阅读,更多相关《编译进程概述与编译程序的结构希赛教育基础学院.docx(15页珍藏版)》请在冰豆网上搜索。
编译进程概述与编译程序的结构希赛教育基础学院
【课前试探】
◇什么是编译程序
◇编译进程和编译程序的结构
◇什么缘故要学习编译程序
【学习目标】
◇明确编译程序的功能及其在运算机系统中的作用。
◇了解源语言程序被编译为目标程序的整个进程,那个进程一样划分为哪些时期。
◇明白编译技术可用于哪类软件的设计和开发。
【学习指南】
编译程序是现代计算机系统的基本组成部分之一。
编译程序一般由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、目标代码生成程序、代码优化程序、表格管理程序和出错处理程序等成分构成。
通过课程的学习应掌握各个成分的功能和设计原则,以及在编译阶段的逻辑关系。
理解他们怎样作为一个整体完成编译任务的。
【难重点】
应该说,本章没有难以理解的内容,主要对编译程序的功能和结构做一综述。
【知识结构】
什么是编译程序
编译程序是现代运算机系统的大体组成部份之一,而且多数运算机系统都含有不止一个高级语言的编译程序。
对有些高级语言乃至配置了几个不同性能的编译程序。
一个编译程序的重要性体此刻它使得多数运算机用户没必要考虑与机械有关的繁琐细节,使程序员和程序设计专家独立于机械,这关于现今机械的数量和种类持续不断地增加的年代尤其重要。
语言和翻译:
语言是人类交流思想和信息的工具。
如自然语言,世界上存在着许多种语言,各国之间要交流信息,就要有各类语言之间的翻译。
运算机语言一样是丰硕多彩的。
从功能上看,一个编译程序确实是一个语言翻译程序。
它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目口号言)的等价的程序。
源语言一般是一个高级语言,如FORTRAN,C或Pascal。
目口号言一般是一个低级语言,如汇编或机械语言。
编译程序的功能如下图。
请注意:
所谓的源和目标程序的等价是什麽含义---他们的功能一样。
图
编译程序作为一个语言翻译程序,也要在翻译进程中检查源程序的语法和语义,报告一些犯错和警告信息,帮忙程序员更正源程序.因此编译程序的功能也能够图示为:
说到一个编译程序,必然要明白它的源语言是什麽,目口号言是什麽,还有它的实现语言是什麽.常利用T型图来表示一个编译程序所涉及的三个语言。
有关编译程序的术语
编译程序的源语言(源程序)
编译程序的目标语言(目标程序)
编译程序的实现语言
给出这些术语的英文:
-编译程序---compiler
-源语言---sourcelanguage
-源程序---sourceprogram
-目标语言---targetorobjectlanguage
-目标程序---targetorobjectprogram
-实现语言---implementationlanguage
若是从运算机系统的角度看,什么是编译程序呢?
咱们说编译程序是一种软件,是系统软件。
通常以为系统软件是居于运算机系统中最靠近硬件的一层,其他软件一样都通过系统软件发挥作用。
系统软件和具体的应用领域无关,如编译系统和操作系统等。
编译程序也是一种语言处置系统,即把软件语言书写的各类程序处置成可在运算机上执行的程序。
编译程序在运算机系统中的所在层
来自运算机百科全书的概念
软件:
运算机系统中的程序及其文档
系统软件:
居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。
他和具体的应用领域无关,如编译系统和操作系统等。
语言处理系统:
把软件语言书写的各种程序处理成可在计算机上执行的程序。
软件语言:
用于书写软件的语言。
它主要包括需求定义语言,功能性语言,设计性语言,程序设计语言以及文档语言。
利用过运算机的人都明白,要把软件语言书写的各类程序处置成可在运算机上执行的程序,除编译程序外,还需要一些其它的程序。
让咱们分析一下一个程序设计语言程序的典型的处置进程,如图,能够从中进一步了解编译程序的作用。
前面介绍过,编译程序的大体任务是将源语言程序翻译成等价的目口号言程序。
咱们明白,源语言的种类成千上万,从经常使用的诸如FORTRAN,PASCAL和C语言,到各类各样的运算机应用领域的专用语言,而目口号言也是成千上万的,加上编译程序依照它们的构造不同,所执行的具体功能的不同又分成了各类类型,比如:
一趟编译、多趟编译的、具有调试或优化功能的等等。
尽管存在这些明显的复杂因素,可是任何编译程序所必需执行的要紧任务大体是一样的,通过明白得这些任务,利用一样的大体技术,咱们能够为各类各样的源语言和目口号言设计和构造编译程序。
图高级语言程序的处理过程
一个源程序有时可能分成几个模块寄存在不同的文件里,将这些源程序聚集在一路的任务由一个叫做预处置程序的程序来完成,有些预处置程序也负责宏展开,像C语言的预处置程序要完成文件归并、宏展开等任务。
若是编译程序生成的目标程序是汇编代码形式,需要经由汇编程序翻译成可再装配的机械代码,再经由装配/连接编辑程序与某些库程序连接成真正能在机械上运行的代码。
也确实是说,一个编译程序的输入可能要由一个或多个预处置程序来产生,另外,为取得能运行的机械代码,编译程序的输出可能仍需要进一步地处置。
编译进程概述和编译程序的结构
编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的进程。
从概念上来讲,一个编译程序的整个工作进程是划分成时期进行的,每一个时期将源程序的一种表示形式转换成另一种表示形式,各个时期进行的操作在逻辑上是紧密连接在一路的。
一样一个编译进程划分成词法分析、语法分析、语义分析、中间代码生成,代码优化和目标代码生成六个时期,这是一种典型的划分方式。
事实上,某些时期可能组合在一路,这些时期间的源程序的中间表示形式就没必要构造出来了。
咱们将别离介绍各时期的任务。
另外两个重要的工作:
表格治理和犯错处置与上述六个时期都有联系。
编译进程中源程序的各类信息被保留在各类不同的表格里,编译各时期的工作都涉及到构造、查找或更新有关的表格,因此需要有表格治理的工作;若是编译进程中发觉源程序有错误,编译程序应报告错误的性质和错误发生的地址,而且将错误所造成的阻碍限制在尽可能小的范围内,使得源程序的其余部份能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之为犯错处置。
图表示了编译的各个时期。
图编译的各个阶段
下面,咱们从源程序在不同时期所被转换成的表示形式来介绍各个时期的任务。
词法分析
词法分析时期是编译进程的第一个时期。
那个时期的任务是从左到右一个字符一个字符地读入源程序,对组成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号)。
那个地址所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。
比如标识符用于表示变量名,是由字母字符开头,后跟字母、数字字符的字符序列组成的一种单词。
保留字(关键字或大体字)是一种单词,另外还有算符,界符等等。
例如某源程序片断如下:
beginvarsum,first,count:
real;sum∶=first+count*10end.
词法分析阶段将构成这段程序的字符组成了如下19个单词序列:
1.保留字begin
2.保留字var
3.标识符sum
4.逗号,
5.标识符first
6.逗号,
7.标识符count
8.冒号:
9.保留字real
10.分号;
11.标识符sum
12.赋值号∶=
13.标识符first
14.加号+
15.标识符count
16.乘号*
17.整数10
18.保留字end
19.界符·
可以看出,五个字符即b,e,g,i和n构成了一个称为保留字的单词begin,两个字符即∶和=组成了表示赋值运算的符号∶=。
这些单词间的空格在词法分析时期都被滤掉了。
我们知道,标识符用于表示变量名,可以很方便的使用id1,id2和id3分别表示sum,first和count三个标识符的内部形式,那么经过词法分析后上述程序片断中的赋值语句
sum∶=first+count*10那么表示为
id1∶=id2+id3*10
词法分析时期的任务是读字符流的源程序、从中识别并组成单词。
一个Pascal源程序片断:
position:
=initial+rate*60;词法分析后可能返回:
单词类型单词值
标识符position
算符(赋值):
=
标识符initial
算符(加)+
标识符rate
算符(乘)*
整数60
界符(分号);
一个C源程序片断:
inta;
a=a+2;
词法分析后可能返回:
单词类型单词值
保留字int
标识符a
界符;
标识符a
算符(赋值)=
标识符a
算符(加)+
整数2
界符;
有关的英文
词法分析---lexicalanalysis或scanning
单词---token
保留字---reseredword
标识符---identifier(user-definedname)
语法分析
语法分析是编译进程的第二个时期。
语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如"程序","语句","表达式"等等。
一样这种语法短语,也称语法单位可表示成语法树,比如上述程序段中的单词序列:
id1∶=id2+id3*10经语法分析得知其是PASCAL语言的"赋值语句",表示成如下图的语法树或是图所示的那种形式。
图语句id1:
=id2+id3*10的语法树
图语句id1:
=id2+id3*10的语法树的另一种形式
语法分析所依据的是语言的语法规那么,即描述程序结构的规那么。
通过语法分析确信整个输入串是不是组成一个语法上正确的程序。
程序的结构一般是由递归规那么表示的,例如,咱们能够用下面的规那么来概念表达式:
(1)任何标识符是表达式。
(2)任何常数(整常数、实常数)是表达式。
(3)若表达式1和表达式2都是表达式,那么:
表达式1+表达式2以及表达式1*表达式2都是表达式。
类似地,语句也可以递归地定义,如
(1)标识符∶=表达式是语句。
(2)while(表达式)do语句和if(表达式)then语句else语句都是语句。
词法分析和语法分析本质上都是对源程序的结构进行分析。
但词法分析的任务仅对源程序进行线性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字串,这只要顺序扫描输入流,碰到既不是字母又不是数字字符时,将前面所发觉的所有字母和数字组合在一路而组成单词标识符。
但这种线性扫描那么不能用于识别递归概念的语法成份,比如就无法仅用线性扫描去匹配表达式中的括号。
语法分析的功能是进行层次分析,把源程序的单词序列组成语法短语(表示成语法树)。
.依据的是语法规那么。
Pascal语言的赋值语句的规那么为:
<赋值语句>:
:
=<标识符>“:
=”<表达式>
<表达式>:
:
=<表达式>“+”<表达式>
<表达式>:
:
=<表达式>“*”<表达式>
<表达式>:
:
=“(”<表达式>“)”
<表达式>:
:
=id
<表达式>:
:
=n
单词序列id1∶=id2+id3*10之因此能表示成图的语法树,依据的是赋值语句和表达式的概念规那么。
语义分析
语义分析时期的任务是审查源
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 进程 概述 编译程序 结构 教育 基础 学院