编译原理编译程序概述

上传人:ni****g 文档编号:423616566 上传时间:2022-12-23 格式:DOCX 页数:14 大小:213.56KB
返回 下载 相关 举报
编译原理编译程序概述_第1页
第1页 / 共14页
编译原理编译程序概述_第2页
第2页 / 共14页
编译原理编译程序概述_第3页
第3页 / 共14页
编译原理编译程序概述_第4页
第4页 / 共14页
编译原理编译程序概述_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《编译原理编译程序概述》由会员分享,可在线阅读,更多相关《编译原理编译程序概述(14页珍藏版)》请在金锄头文库上搜索。

1、【课前思考】什么是编译程序编译过程和编译程序的结构 为什么要学习编译程序【学习目标】 明确编译程序的功能及其在计算机系统中的作用。 了解源语言程序被编译为目标程序的整个过程,这个过程一般划分为哪些阶段。 知道编译技术可用于哪类软件的设计和开发。【学习指南】编译程序是现代计算机系统的基本组成部分之一。编译程序一般由词法分析程序、语法 分析程序、语义分析程序、中间代码生成程序、目标代码生成程序、代码优化程序、表格管 理程序和出错处理程序等成分构成。通过课程的学习应掌握各个成分的功能和设计原则,以 及在编译阶段的逻辑关系。理解他们怎样作为一个整体完成编译任务的。难重点】应该说,本章没有难以理解的内容

2、,主要对编译程序的功能和结构做一综述。【知识结构】*什么是編译程_編译程序的功能一编译程序在计算机系统中的作用引论A編译过程的逻辑阶段*词法分析4语法分析4语义分析A中间代码生成4目标代码生成A代码忧化*编译程序的构成*词法分析程序 A语法分析程序4语爻分析程序4中间代码生成程序4目标代码生成程序4代码忧化程序4表格管理程序4出错处理程序*編译阶段的组合编译前端4编译后端4编译的“遍”A編译技术的应用和发展1.1什么是编译程序编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止一个 高级语言的编译程序。对有些高级语言甚至配置了几个不同性能的编译程序。 一个编译程序的重要性体

3、现在它使得多数计算机用户不必考虑与机器有关的繁琐细节,使程 序员和程序设计专家独立于机器,这对于当今机器的数量和种类持续不断地增长的年代尤为 重要。语言和翻译:语言是人类交流思想和信息的工具。如自然语言,世界上存在着许多种语 言,各国之间要交流信息,就要有各种语言之间的翻译。计算机语言同样是丰富多彩的。 从功能上看,一个编译程序就是一个语言翻译程序。它把一种语言(称作源语言)书写的程序 翻译成另一种语言 ( 称作目标语言 ) 的等价的程序。源语言通常是一个高级语言,如FORTRAN, C或Pascal。目标语言通常是一个低级语言如汇编或机器语言。编译程序的功 能如图 1.1 所示。请注意:所谓

4、的源和目标程序的等价是什麽含义-他们的功能一样。图 1.1高级语言程序 編译程序低级语言程序C目标程序)编译程序作为一个语言翻译程序,也要在翻译过程中检查源程序的语法和语义,报告一些出错和警告信息,帮助程序员更正源程序.所以编译程序的功能也可以图示为:说到一个编译程序, 一定要知道它的源语言是什麽,目标语言是什麽,还有它的实现语言 是什麽.常使用T型图来表示一个编译程序所涉及的三个语言。有关编译程序的术语 编译程序的源语言(源程序) 编译程序的目标语言(目标程序) 编译程序的实现语言 给出这些术语的英文:编译程序-compiler源语 言-source language源程序-source p

5、rogram目标语言-target or object language目标程序-target or object program实现语言-implementation language 如果从计算机系统的角度看,什么是编译程序呢?我们说编译程序是一种软件,是系统软件。 通常认为系统软件是居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发 挥作用。系统软件和具体的应用领域无关,如编译系统和操作系统等。编译程序也是一种语 言处理系统,即把软件语言书写的各种程序处理成可在计算机上执行的程序。 编译程序在计算机系统中的所在层来自计算机百科全书的定义软件:计算机系统中的程序及其文档 系统软

6、件:居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作 用。他和具体的应用领域无关,如编译系统和操作系统等。语言处理系统:把软件语言书写的各种程序处理成可在计算机上执行的程序。 软件语言:用于书写软件的语言。它主要包括需求定义语言,功能性语言,设计性语言, 程序设计语言以及文档语言。 使用过计算机的人都知道,要把软件语言书写的各种程序处理成可在计算机上执行的程序 除了编译程序外,还需要一些其它的程序。让我们分析一下一个程序设计语言程序的典型的 处理过程,如图 1.2,可以从中进一步了解编译程序的作用。 前面介绍过,编译程序的基本任务是将源语言程序翻译成等价的目标语言程序。我们知

7、道 源语言的种类成千上万,从常用的诸如FORTRAN, PASCAL和C语言,到各种各样的计算 机应用领域的专用语言,而目标语言也是成千上万的,加上编译程序根据它们的构造不同 所执行的具体功能的差异又分成了各种类型,比如:一趟编译、多趟编译的、具有调试或优 化功能的等等。尽管存在这些明显的复杂因素,但是任何编译程序所必须执行的主要任务基 本是一样的,通过理解这些任务,使用同样的基本技术,我们可以为各种各样的源语言和目 标语言设计和构造编译程序。图 1.2 高级语言程序的处理过程一个源程序有时可能分成几个模块存放在不同的文件里,将这些源程序汇集在一起的任 务由一个叫做预处理程序的程序来完成,有些

8、预处理程序也负责宏展开,像 C 语言的预处 理程序要完成文件合并、宏展开等任务。如果编译程序生成的目标程序是汇编代码形式,需 要经由汇编程序翻译成可再装配的机器代码,再经由装配/连接编辑程序与某些库程序连接 成真正能在机器上运行的代码。也就是说,一个编译程序的输入可能要由一个或多个预处理 程序来产生,另外,为得到能运行的机器代码,编译程序的输出可能仍需要进一步地处理 1.2编译过程概述和编译程序的结构编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。从概念上来 讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式 转换成另一种表示形式,各个阶段进行的

9、操作在逻辑上是紧密连接在一起的。一般一个编译 过程划分成词法分析、语法分析、语义分析、中间代码生成,代码优化和目标代码生成六个 阶段,这是一种典型的划分方法。事实上,某些阶段可能组合在一起,这些阶段间的源程序 的中间表示形式就没必要构造出来了。我们将分别介绍各阶段的任务。另外两个重要的工作: 表格管理和出错处理与上述六个阶段都有联系。编译过程中源程序的各种信息被保留在种种 不同的表格里,编译各阶段的工作都涉及到构造、查找或更新有关的表格,因此需要有表格 管理的工作;如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误发生的 地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程

10、序的其余部分能继续被 编译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。图1.3 表示了编译 的各个阶段。图 1.3 编译的各个阶段下面,我们从源程序在不同阶段所被转换成的表示形式来介绍各个阶段的任务。词法分析 词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符 地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词 符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。 比如标识符用于表示变量名,是由字母字符开头,后跟字母、数字字符的字符序列组成的一 种单词。保留字(关键字或基本字)是一种单词,此外还

11、有算符,界符等等。例如某源程序片 断如下:begin var sum, first, count: real; sum : =first+count*10 end.词法分析阶段将构成这段程序的字符组成了如下19个单词序列:1. 保留字 begin2. 保留字 var3. 标识符 sum4. 逗号,5. 标识符 first6. 逗号,7. 标识符 count8. 冒号:9. 保留字 real10. 分号;11. 标识符 sum12. 赋值号: =13. 标识符 first14. 加号 +15. 标识符 count16. 乘号*17. 整数 1018. 保留字 end19.界符可以看出,五个字符即

12、b, e, g, i和n构成了一个称为保留字的单词begin,两个字符 即:和=构成了表示赋值运算的符号:=。这些单词间的空格在词法分析阶段都被滤掉了。我们知道,标识符用于表示变量名,可以很方便的使用idl,id2和id3分别表示sum, first 和 count 三个标识符的内部形式,那么经过词法分析后上述程序片断中的赋值语句 sum: =first+count*10 则表示为id1: =id2+id3*10 词法分析阶段的任务是读字符流的源程序、从中识别并构成单词。一个Pascal源程序片断:position := initial + rate * 60;词法分析后可能返回: 单词类型

13、单词值标识符 position 算符(赋值) := 标识符 initial 算符(加) + 标识符 rate 算符(乘) * 整数 60 界符(分号) ;一个 C 源程序片断:int a; a = a + 2;词法分析后可能返回:单词类型 单词值保留字 int标识符 a界符 ;标识符 a算符(赋值) =标识符 a算符(加) +整数 2界符 ;有关的英文词法分析-lexical analysis 或者 scanning 单词-token保留字-resered word标识符 -identifier(user-defined name)语法分析 语法分析是编译过程的第二个阶段。语法分析的任务是在词

14、法分析的基础上将单词序列 分解成各类语法短语,如程序,语句,表达式等等。一般这种语法短语,也称语法单 位可表示成语法树,比如上述程序段中的单词序列:idl : =id2+id3*10经语法分析得知其是PASCAL语言的赋值语句”,表示成如图1.4所 示的语法树或是图 1.5 所示的那种形式。图1.4语句id1:=id2+id3*10的语法树图1.5语句id1:=id2+id3*10的语法树的另一种形式idl10id3id2语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入 串是否构成一个语法上正确的程序。程序的结构通常是由递归规则表示的,例如,我们可以 用下面的规

15、则来定义表达式:(1) 任何标识符是表达式。(2) 任何常数(整常数、实常数)是表达式。(3) 若表达式 1 和表达式 2 都是表达式,那么:表达式 1+表达式 2以及表达式 1 * 表达 式 2 都是表达式。类似地,语句也可以递归地定义,如(1) 标识符: =表达式是语句。(2) while(表达式)do语句和if(表达式)then语句else语句都是语句。词法分析和语法分析本质上都是对源程序的结构进行分析。但词法分析的任务仅对源程序进 行线性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字串,这 只要顺序扫描输入流,遇到既不是字母又不是数字字符时,将前面所发现的所有字母和数字 组合在一起而构成单词标识符。但这种线性扫描则不能用于识别递归定义的语法成分,比如 就无法仅用线性扫描去匹配表

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号