分享
分享赚钱 收藏 举报 版权申诉 / 91

类型南邮计算机复试 编译原理 第一章.ppt

  • 上传人:kpmy5893
  • 文档编号:9493843
  • 上传时间:2019-08-10
  • 格式:PPT
  • 页数:91
  • 大小:1.29MB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    南邮计算机复试 编译原理 第一章.ppt
    资源描述:

    1、1,编 译 原 理 Compiler Principles,徐小龙 PhD 南京邮电大学.计算机学院,第一章 概 述,教材:编译技术原理及其实现方法王汝传 编著,2,第一章 概 述,1.1 程序设计语言一、语言的概念和分类二、程序设计语言简述 1.2 翻译程序一、汇编程序 二、解释程序三、编译程序1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起) 1.4 编译过程简述一、编译步骤二、编译过程简述三、趟程(遍) 1.5 编译程序的生成一、编写编译程序的一般方法二、编译

    2、程序开发技术三、编译程序的自动生成,3,第一章 概 述,1.1 程序设计语言一、语言的概念和分类二、程序设计语言简述 1.2 翻译程序一、汇编程序 二、解释程序三、编译程序1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起) 1.4 编译过程简述一、编译步骤二、编译过程简述三、趟程(遍) 1.5 编译程序的生成一、编写编译程序的一般方法二、编译程序开发技术三、编译程序的自动生成,4,第一章 概 述,1.1 程序设计语言 一、语言的概念和分类1.概念2.语言的分类 二、程

    3、序设计语言简述1.机器语言(第一代语言)2.汇编语言(第二代语言:50年代中期出现)3.高级程序设计语言(第三代语言:50年代中期提出)4.超高级程序设计语言(第四代语言),5,第一章 概 述,1.1 程序设计语言 一、语言的概念和分类1.概念2.语言的分类 二、程序设计语言简述1.机器语言(第一代语言)2.汇编语言(第二代语言:50年代中期出现)3.高级程序设计语言(第三代语言:50年代中期提出)4.超高级程序设计语言(第四代语言),6,1.1 程序设计语言 一、语言的概念和分类1.概念语言是人类所特有的用来表达意思、交流思想的工具,是一种特殊的社会现象,由语音、词汇、语法、语义构成一个系统

    4、。语言包括口语和书面形式。,7,1.1 程序设计语言 一、语言的概念和分类2.语言的分类(1)自然语言人与人之间交流信息的一种语言. 动物之间通过动物语言交流信息.(2)数理语言以数理逻辑、集合论和统计数学来描述的一种语言。 例如,用计算机进行几何定理的证明就得以数理语言形式进行描述。(3)程序设计语言人和计算机进行信息交流的一种语言,它遵循一定的语法和语义的规则,而编译程序的功能正是:1)讨论语法,检查程序正确性2)讨论语义,生成目标代码,8,第一章 概 述,1.1 程序设计语言 一、语言的概念和分类1.概念2.语言的分类 二、程序设计语言简述1.机器语言(第一代语言)2.汇编语言(第二代语

    5、言:50年代中期出现)3.高级程序设计语言(第三代语言:50年代中期提出)4.超高级程序设计语言(第四代语言),9,第一章 概 述,1.1 程序设计语言 一、语言的概念和分类1.概念2.语言的分类 二、程序设计语言简述1.机器语言(第一代语言)2.汇编语言(第二代语言:50年代中期出现)3.高级程序设计语言(第三代语言:50年代中期提出)4.超高级程序设计语言(第四代语言),10,二、程序设计语言简述,机器语言(第一代)低级语言汇编语言(第二代)初期 :FORTRAN、ALGOL、COBOL发展期 :LISP、APL、SNOBOL、PL/1、(第三代) SIMULA、BASIC 程序设计语言

    6、高级语言 结构化时期 :PASCAL、MODULA-2、Ada、C函数式:ML、LISP、APL多范型时期 逻辑式:PROLOG面向对象:Smalltalk、C+、Java(第四代) SQL 网络 :Java、Perl、C#超高级语言 报表语言MAPPER,1.1 程序设计语言,11,第一章 概 述,1.1 程序设计语言一、语言的概念和分类二、程序设计语言简述 1.2 翻译程序一、汇编程序 二、解释程序三、编译程序1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起) 1

    7、.4 编译过程简述一、编译步骤二、编译过程简述三、趟程(遍) 1.5 编译程序的生成一、编写编译程序的一般方法二、编译程序开发技术三、编译程序的自动生成,12,第一章 概 述,1.2 翻译程序一、汇编程序 二、解释程序三、编译程序,13,1.2 翻译程序只有机器语言编的程序才能被计算机识别并运行,为了能使汇编语言和高级程序设计语言编写的程序被计算机接受,必须将它们转换成具体的机器语言程序。我们将要介绍的汇编程序、解释程序和编译程序就是完成这种转换功能的翻译程序。翻译程序将一种语言程序(称为源程序)改造成另一种等价的语言程序(称为目标程序)的程序。 源语言书写源程序的语言称为源语言. 目标语言书

    8、写目标程序的语言称为目标语言.,14,第一章 概 述,1.2 翻译程序一、汇编程序 二、解释程序三、编译程序,15,第一章 概 述,1.2 翻译程序一、汇编程序 二、解释程序三、编译程序,16,汇编程序:把汇编语言写的源程序翻译成机器语言的目标程序,这个翻译过程称为汇编。如下图:初始数据 汇编源程序 汇编程序 目标程序 结果数据汇编程序执行过程汇编程序一般对源程序进行两遍扫描来完成。第一遍:进行存贮分配,造出第二遍扫描时用的各种表格;第二遍:用机器语言操作码来代替汇编符号操作码。,1.2 翻译程序一、汇编程序,17,第一章 概 述,1.2 翻译程序一、汇编程序 二、解释程序三、编译程序,18,

    9、第一章 概 述,1.2 翻译程序一、汇编程序 二、解释程序三、编译程序,19,解释程序:将高级语言写的源程序作为输入数据,但并不产生目标 程序,而是边解释边执行源程序本身的一种程序。如下图源程序 解 结释 果程 数初始数据 序 据解释程序执行过程,解释程序适合于会话型语言,如BASIC语言。 主要优点: 1,易于为用户提供调试功能,对源程序的语法分析及出错处理都很及时, 2,修改调试也很方便,但是解释程序执行速度较慢,运行效率低。,1.2 翻译程序二、解释程序,20,第一章 概 述,1.2 翻译程序一、汇编程序 二、解释程序三、编译程序,21,第一章 概 述,1.2 翻译程序一、汇编程序 二、

    10、解释程序三、编译程序,22,编译程序 是将高级语言写的源程序翻译成目标语言(汇编语言、机器语言)的程序。这种翻译过程称为编译。 编译系统 目标程序,再加上运行系统(如服务子程序、动态分配程序、装配程序等)就可获得计算结果,整个系统称为编译系统。,1.2 翻译程序三、编译程序,23,编译程序执行过程,源程序,编译程序,目标程序 (机器语言),源程序,编译程序,目标程序 (汇编语言),汇编程序,目标程序 (机器语言),编译阶段,编译阶段,汇编阶段,目标程序 (机器语言),运行系统,可执行程序,结果数据,运行阶段,24,上述三种翻译程序,汇编程序最容易实现,其次是解释程序,编译程序最难。所以只要掌握

    11、了编译程序实现方法,汇编程序和解释程序就迎刃而解了。下面我们就具体介绍一下编译程序,25,第一章 概 述,1.1 程序设计语言一、语言的概念和分类二、程序设计语言简述 1.2 翻译程序一、汇编程序 二、解释程序三、编译程序1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起) 1.4 编译过程简述一、编译步骤二、编译过程简述三、趟程(遍) 1.5 编译程序的生成一、编写编译程序的一般方法二、编译程序开发技术三、编译程序的自动生成,26,第一章 概 述,1.3 编译程序简史

    12、一、汇编语言阶段(50年代初)1. 汇编符号出现2.宏指令出现3.子程序出现二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起),27,1.3 编译程序简史编译程序的发展和计算机的发展紧密联系在一起,从1946年第一台电子计算机ENIAC出现,计算机经历了第一代电子管、第二代晶体管、第三代集成电路、第四代大规模集成电路计算机的发展,而编译程序技术和其他系统软件如:操作系统、数据库以及网络等也不断完善和发展,28,一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(196

    13、0年)四、编译程序技术方法进一步发展(70年代起),编译程序的发展分为以下四个阶段:,29,1.3 编译程序简史一、汇编语言阶段(50年代初)最初的手编程序即用机器指令编程序十分麻烦,为克服以上缺点,在50年代初提出用汇编符号代替机器指令的思想。,30,1.3 编译程序简史一、汇编语言阶段(50年代初)1. 汇编符号出现必须有对应的汇编程序,可以说汇编程序是编译的初级阶段,汇编符号仍然因难记、符号多等缺点被宏指令代替。,31,1.3 编译程序简史一、汇编语言阶段(50年代初)2.宏指令出现把一些完成特定功能的指令定义为宏指令,宏指令 可以看成机器指令一样,在写程序时直接使用它。,32,1.3

    14、编译程序简史一、汇编语言阶段(50年代初)3.子程序出现为了避免大量重复工作,后来采用了子程序库方法。即把一些经常使用完成某些特定功能的公用程序独立出 来编成一段程序(称为子程序)将所有子程序集中在一起称为子程序库。在汇编语言阶段尽管采取了以上一些措施,但编程工作仍是一件十分繁琐乏味且容易出错的事情,这又促使了高级程序设计语言的出现。,33,第一章 概 述,1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起),34,第一章 概 述,1.3 编译程序简史一、汇编语言阶段(

    15、50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起),35,1.3 编译程序简史二、高级程序语言出现(1956年)编译程序开始从1954年美国开始研制高级程序设计语言,直到1956年首先在IBM704机上实现了FORTRAN编译程序。这个早期的编译程序共花了18个人年,由此可见,编译程序是一个大型软件。,36,第一章 概 述,1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起),37

    16、,第一章 概 述,1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起),38,1.3 编译程序简史三、编译程序理论开始确定(1960年)FORTRAN编译程序产生时,编译技术方法还缺乏理论 基础,1960年ALGOL60提出,并用巴科斯范式BNF对语 言语法进行严格定义,因而提出了高级程序设计语言 编译程序技术方法,包括:简单优先法、算符优先 法、LL分析和LR分析法。,39,第一章 概 述,1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(195

    17、6年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起),40,第一章 概 述,1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起),41,1.3 编译程序简史 四、编译程序技术方法进一步发展(70年代起)随着程序语言进一步发展,尤其结构化程序语言(如:PASCAL)的出现,人们开始用高级语言书写编译程序,开始研究编译自动化问题,词法分析自动构造,LR自动分析器构造等,还着手研究直接执行高级语言计算机。我们相信随着计算机科学进

    18、一步发展,将会使编译方法有更新的发展。,42,第一章 概 述,1.1 程序设计语言一、语言的概念和分类二、程序设计语言简述 1.2 翻译程序一、汇编程序 二、解释程序三、编译程序1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起) 1.4 编译过程简述一、编译步骤二、编译过程简述三、趟程(遍) 1.5 编译程序的生成一、编写编译程序的一般方法二、编译程序开发技术三、编译程序的自动生成,43,第一章 概 述,1.1 程序设计语言一、语言的概念和分类二、程序设计语言简述 1

    19、.2 翻译程序一、汇编程序 二、解释程序三、编译程序1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起) 1.4 编译过程简述一、编译步骤二、编译过程简述三、趟程(遍) 1.5 编译程序的生成一、编写编译程序的一般方法二、编译程序开发技术三、编译程序的自动生成,44,第一章 概 述,1.4 编译过程简述一、编译步骤二、编译过程简述1.源程序输入2.词法分析3.语法分析4.语义分析5.修饰优化6.目标代码生成三、趟程(遍)1.定义 2.决定趟程的因素,45,第一章 概 述

    20、,1.4 编译过程简述一、编译步骤二、编译过程简述1.源程序输入2.词法分析3.语法分析4.语义分析5.修饰优化6.目标代码生成三、趟程(遍)1.定义 2.决定趟程的因素,46,前面我们介绍了编译程序的一些基本概念,因为编译过程是一个极其复杂的过程,下面通过一个简单例子叙述一下该过程。类似于外文资料的翻译过程:读一个个字母(字符) 构成独立单词分析语法关系 初步译成中文 加工修改 写出译文编译过程基本包括以下几个步骤:1.词法分析 2.语法分析 3.语义分析 4.中间代码生成 5.修饰优化 6.生成目标程序,1.4 编译过程简述一、编译步骤,47,翻译外文资料 阅读原文 识别单词 分析句子 修

    21、辞加工 写出译文,编译过程 输入源程序(读符号) 词法分析 语法语义分析 修饰优化 目标代码生成,它们之间的对应关系如下:,48,第一章 概 述,1.4 编译过程简述一、编译步骤二、编译过程简述1.源程序输入2.词法分析3.语法分析4.语义分析5.修饰优化6.目标代码生成三、趟程(遍)1.定义 2.决定趟程的因素,49,第一章 概 述,1.4 编译过程简述一、编译步骤二、编译过程简述1.源程序输入2.词法分析3.语法分析4.语义分析5.修饰优化6.目标代码生成三、趟程(遍)1.定义 2.决定趟程的因素,50,1.4 编译过程简述 二、编译过程简述下面通过一个简单PASCAL源程序实例,说明编译

    22、基本过程。例1.1计算圆柱体全面积S=2R(H+R) 其中R为半径,H为高,用PASCAL可写出下列源程序:PROGRAM example;VAR r, h, s: real;BEGINs=2*3.1416*r*(r+h)END对上例PASCAL源程序编译过程一般需要经过以下几个步骤:,51,1.4 编译过程简述二、编译过程简述1.源程序输入就是将源程序通过键盘输入到计算机中成为一个字符串,如例子变为:PROGRAM example;VAR,H,S:real;BEGIN S:=3.1416*R*(H+R)END.,52,1.4 编译过程简述二、编译过程简述2.词法分析(1)功能1) 扫描源程序

    23、进行读符号,删除无用字符(如空格、注释等)2) 将一个个有独立意义的单词识别出来,并且转换成统一长度 的内部编码。3) 建立有关表格(如名字特征表、常数表),进行词法检查以 供语法和语义分析用。,53,1.4 编译过程简述二、编译过程简述2.词法分析(2)分析过程1)识别单词: 将有独立意义的单词分辨出来。源程序中有些符号具有独立意义,如: +、-、*,有些单个符号 又没有独立意义,如: b, g, a,只有这些符号组成一个单词才有 意义,如:Begin,end,real等等,分别表示开始,结束和变量类型说明。,又如:R,H,S经类型说明real修饰后也是有意义的,上述程序 经过读符号,识别单

    24、词后一共有下面27个独立意义单词: PROGRAM example ; VAR R , H , S : real ; BEGIN S := 2 * 3.1416 * R * ( H + R ) END,54,2)将单词转换成内部编码识别出单词后,各单词在机器内部表示仍然是一个个字符、数 字,如:begin是由5个字母组成,而R是由一个字母组成,它们 长度不一,为了便于以后语法分析,必须转换成一种长度统一的 内部编码。.要求: a.长度统一: 即在机器里有相等的二进制位数,b.反映单词属性:即通过内部编码可以知道该单词的性质或类型。例子中:program , begin, var, real ,

    25、 end 是保留字+,*是运算符( , )是分隔符H , R ,S是标识符c.便于编译程序进行内部加工处理,55,.程序内部编码:由类型和单词值两部分组成。格式如下:类别 单词的值a. 单词类型用整数表示,通常可将单词分为以下5个类型1:保留字 如 PROGRAM BEGIN VAR REAL END2:专用符号 如 +、*、:=、;、,、(、)等3:标识符 如 R、H、S,4:无符号整数 如 25:无符号实数 如3.1416,56,b.保留字及专用符号的单词值可以用一个三位八进制数表示,如本例 中为保留字和专用字符指定了如下的单词值:PROGRAM 000 , 007BEGIN 001 (

    26、010END 002 ) 011 REAL 003 ; 012VAR 004 := 013* 005 : 014+ 006 . 015,57,根据内部编码的格式,例子中的PROGRAM,BEGIN和*依次可以表示 如下:PROGRAM 1 000 BEGIN 1 001* 2 005标识符和常数的单词值为对应的内存地址。3)建立各种表以供语法和语义分析,如名字特性表,常数表等。 对应上例名字特性表及常数表如下:名字特性表000 R实型 存储系统002 H实型 存储系统004 S实型 存储系统,每个名字占两个存储单元 000,002,004表示相对地址,58,常数表000 2001 3.1416

    27、 对于标识符和常数,可以用其在特征表或常数表中的相对地址来表示 单词值。如例中:R 3 000H 3 002 3.1416 5 0012 4 000,一个常数占一个存储单元,59,所以经词法分析后,其内部编码形式于机器内为如下形式1 000 3 777 2 012 1 004 3 000 2 007 3 002 2 007 PROGRAM example ; VAR R , H ,3 004 2 014 1 003 2 012 1 001 3 004 2 013 4 000S : real ; BEGIN S := 22 005 5 001 2 005 3 000 2 005 2010 3 0

    28、02 2 006* 3.1416 * R * ( H + 3 000 2 011 1 002 2 015R ) END .由上述分析可知,经词法分析,源程序转换成内部编码形式,不同类型的单词其长度是统一的,这有助于以后的语法分析 。,60,1.4 编译过程简述二、编译过程简述3.语法分析(1)功能语法分析阶段就是将词法分析后所有单词组成句子,根据不同高级语言不同语法规则来分析这些句子乃至程序是否正确。例如:上例中赋值语句形如:变量:=表达式语法分析检查赋值语句是否合乎规则,表达式是否符合语法。若表达式写为:2*3.1416*r*(h+r,则表达式是错误,少一个右括号“)”。,61,(2)语法分

    29、析方法采用语法分析方法,如递归子程序法、算符优先发、状态矩阵法、LR分析法等逐一查看源程序语法结构,若发现不合语法规则的就输出出错信息,否则作为正确程序提供给语义分析使用。整个源程序经过语法分析后,若完全正确,则开头及说明部分可以去掉,所以最后形式为:整个源程序经过语法分析后,若完全正确,则开头及说明部分可以去掉,所以最后形式为: BEGIN S = 2 * 3.1416 * R * ( R + H )END1001 3004 2013 4000 2005 5001 2005 3000 2005 2010 3000 2006 3002 2011 1002,62,为方便问题的说明,在这里用 M1

    30、、M2、M3表示R、H和S ; 用 C1、C2表示2和3.1416最后的源程序:BEGIN S=2*3.1416*R*(R+H) END就表示成:BEGIN M3=C1*C2*M1*(M2+M1) END,63,1.4 编译过程简述二、编译过程简述4.语义分析语义:就是源程序中各种语句的含义。如:A:=5*C是赋值语句表示将赋值号右边表达式送给左部变量。(1)功能根据语义分析语句的含义,并将源程序表示成一种内部形式( 中间语言)或直接生成目标程序。内部形式即中间代码类型多样,如三元式、四元式、波兰和逆波兰等等,具体内容放在后面章节里专门介绍。,64,(2)分析过程例如上面的源程序:BEGIN

    31、S=2*3.1416*R*(R+H) ENDBEGIN M3=C1*C2*M1*(M2+M1) END经语义分析:1)是一个赋值语句,将右部表达式计算结果送给左边变量。2)在计算表达式值时先计算C1*C2,然后再乘以M1, 此时要保存中间结果,然后再将M2加上M1,其结 果再与上面计算结果相乘。3) 将右部表达式计算结果送给M3,65,1.4 编译过程简述二、编译过程简述5.修饰优化目的:使得生成的目标程序占有内存少,运行速度快。例:循环语句 FOR i:=1 to n DO ci=a*b i 每取一个值,表达式a*b就要计算一次,当n值较大时,重复的次数就多了,若将其改写为:t:=a*bFO

    32、R i:=1 to n DO ci=t则只要进行一次a*b的计算,大大缩短了运行时间,提高了运行速度。,66,目标程序如下: BEGIN M3=C1*C2*M1*(M2+M1) END,不优化 取 C1 (2)* C2 (3.1416)* M1 (R) 送 T1 (2*3.1416*R) 取 M2 (H)+ M1 (R)* T1 (2*3.1416*R*(R+H) 送 M3 (S),优化后 先做 C3=C1*C2 取 M2+ M1* C3* M1 送 M3 (S),8 条,5 条,67,1.4 编译过程简述二、编译过程简述6.目标代码生成目标代码生成就是将中间语言代码转换成机器语 言程序或汇编

    33、语言程序,最后完成翻译。,68,整个编译过程如下图所示,源程序,词法 分析 程序,语法 分析 程序,语义 分析 程序,中间 代码 生成,代码 优化 程序,目标 代码 生成,目标程序,信 息 表 管 理 程 序,错 误 检 查 和 处 理 程 序,大多情况下,将语义分析包含在语法分析过程中,这样就将编译过程 分成5个阶段,事实上,这并非固定不变的,有时中间代码、优化可以省 掉,有时还要进行错误检查和处理以及各种信息表格的管理。,69,第一章 概 述,1.4 编译过程简述一、编译步骤二、编译过程简述1.源程序输入2.词法分析3.语法分析4.语义分析5.修饰优化6.目标代码生成三、趟程(遍)1.定义

    34、 2.决定趟程的因素,70,第一章 概 述,1.4 编译过程简述一、编译步骤二、编译过程简述1.源程序输入2.词法分析3.语法分析4.语义分析5.修饰优化6.目标代码生成三、趟程(遍)1.定义 2.决定趟程的因素,71,1.4 编译过程简述三、趟程(遍)在确定编译程序具体实现时,常常将编译程序按其扫描遍数分为一遍扫描或多遍扫描 。,72,1.4 编译过程简述三、趟程(遍)1. 定义 从头到尾扫描一遍源程序或等价源程序,并做有关加工处理,称趟程。每经过一趟源程序都要进行等价变换并更接近目标程序。 如果通过对源程序一遍扫描直接生成目标代码程序,则说编译程序是单遍的。把源程序分为几遍来编译,每遍只完

    35、成编译程序中的一部分或几个部分工作,称为多遍的。 比如第一遍进行词法、语法分析,检查语法错误;第二遍生成中间语言进行存储分配;第三遍生成可运行的目标程序。,73,源程序 编译程序 目标程序一遍扫描编译程序源程序 第一遍扫描程序 中间语言1 中间语言n-1 第n趟扫描程序 目标程序多遍扫描编译程序优点:加工充分;出错处理细致;目标程序质量高缺点:编译时间长,开销大,多遍扫描的优点弥补了单遍的缺点,单遍却避免了多遍的缺点,74,1.4 编译过程简述 三、趟程(遍) 2.决定趟程的因素(1)计算机存贮容量大小; (2)编译程序功能强弱; (3)源语言繁简; (4)目标程序优化程度; (5)设计和实现

    36、编译程序时使用工具的先进程度(6)参加人员多少和素质等等。,75,第一章 概 述,1.1 程序设计语言一、语言的概念和分类二、程序设计语言简述 1.2 翻译程序一、汇编程序 二、解释程序三、编译程序1.3 编译程序简史一、汇编语言阶段(50年代初)二、高级程序语言出现(1956年)编译程序开始三、编译程序理论开始确定(1960年)四、编译程序技术方法进一步发展(70年代起) 1.4 编译过程简述一、编译步骤二、编译过程简述三、趟程(遍) 1.5 编译程序的生成一、编写编译程序的一般方法二、编译程序开发技术三、编译程序的自动生成,76,第一章 概 述,1.5 编译程序的生成一、编写编译程序的一般

    37、方法1.直接用机器语言编写编译程序2.用汇编语言编写编译程序3.用系统程序设计语言编写 二、编译程序开发技术1.自编译2.交叉编译3.自展技术4.移植三、编译程序的自动生成,77,1.5 编译程序的生成,编译程序是一个非常复杂的软件系统,虽然编译理论和编译技术不断发展,已使编译程序的生产周期不断缩短,但目前研制一个编译程序仍需要相当长时间,而且工作相当艰巨。因此,如何高效地生成一个高质量的编译程序一直是人们追求的目标。,78,第一章 概 述,1.5 编译程序的生成一、编写编译程序的一般方法1.直接用机器语言编写编译程序2.用汇编语言编写编译程序3.用系统程序设计语言编写 二、编译程序开发技术1

    38、.自编译2.交叉编译3.自展技术4.移植三编译程序的自动生成,79,第一章 概 述,1.5 编译程序的生成一、编写编译程序的一般方法1.直接用机器语言编写编译程序2.用汇编语言编写编译程序3.用系统程序设计语言编写 二、编译程序开发技术1.自编译2.交叉编译3.自展技术4.移植三、编译程序的自动生成,80,1.5 编译程序的生成一、编写编译程序的一般方法 1.直接用机器语言编写编译程序机器语言是早期编写编译程序的唯一工具, 但由于机器语言难读难写 , 现在几乎没有人再用它。,81,1.5 编译程序的生成一、编写编译程序的一般方法2.用汇编语言编写编译程序由于汇编语言太依赖于硬件环境,且程序过于

    39、冗长, 现在也不常用, 不过由于它通过汇编程序产生的目标代码效率比较高, 所以在编译程序核心部分常用它编写。,82,1.5 编译程序的生成一、编写编译程序的一般方法3.用系统程序设计语言编写由于用机器语言和汇编语言编写编译程序其主要缺点是效率低,因此越来越多的人倾向于使用高级语言作为工具来编写编译程序。80年代开始, 几乎所有的编译程序都是用高级语言编写, 从而避开了与机器有关许多烦琐细节,大大减轻编写编译程序工作量。并非所有高级语言都适合于编写编译程序。,83,第一章 概 述,1.5 编译程序的生成一、编写编译程序的一般方法1.直接用机器语言编写编译程序2.用汇编语言编写编译程序3.用系统程

    40、序设计语言编写 二、编译程序开发技术1.自编译2.交叉编译3.自展技术4.移植三编译程序的自动生成,84,第一章 概 述,1.5 编译程序的生成一、编写编译程序的一般方法1.直接用机器语言编写编译程序2.用汇编语言编写编译程序3.用系统程序设计语言编写 二、编译程序开发技术1.自编译2.交叉编译3.自展技术4.移植三编译程序的自动生成,85,1.5 编译程序的生成 二、编译程序开发技术 1. 自编译 (1)自编译概念,1)如果一种高级语言与之相应的编译程序也能直接用该语言本身写出来 , 具有这种性质语言称自编译语言 , 即自编译。能够编译自身的编译程序称自编译程序。2)自编译语言除了书写自身编

    41、译程序外 , 一般还可以编写其它语言编译程序 。3)系统程序设计语言就是这样语言,通常把能够编写编译程序或其它系统软件(如操作系统)的高级语言称系设计语言,到目前为止,作为系统程序设计语言有PASCAL, MODULA, C, C+和ADA等。,86,1.5 编译程序的生成 二、编译程序开发技术 2.交叉编译 (1)交叉编译的概念,如果一个 A 机器上编译程序能产生 B 机器的目标代码 , 则称这种程序为交叉编译程序。,87,1.5 编译程序的生成 二、编译程序开发技术 3.自展技术,(1)自展技术的定义自展技术可以由一个功能较小的编译程序 , 一级一级扩充而变成一个功能较强的编译程序。,88

    42、,1.5 编译程序的生成 二、编译程序开发技术 3.移植 (1)移植是编译程序开发中一项十分重要技术 , 移植就是把一台 计算机上的软件移植到另一台计算机上去。(2)移植方法: 一种方法是综合几种型号计算机抽象出一个通用的汇编 语言, 而每种型号 -计算机上只要配有一个简单汇编程序 , 用它来把通用汇编语言书写的程序翻 译成机器语言程序。(3)另一种方法就是利用交叉编译方法可以把一台计算机上自 编译语言的编译程序移植到另 一台计算机上。,89,第一章 概 述,1.5 编译程序的生成一、编写编译程序的一般方法1.直接用机器语言编写编译程序2.用汇编语言编写编译程序3.用系统程序设计语言编写 二、

    43、编译程序开发技术1.自编译2.交叉编译3.自展技术4.移植三、编译程序的自动生成,90,第一章 概 述,1.5 编译程序的生成一、编写编译程序的一般方法1.直接用机器语言编写编译程序2.用汇编语言编写编译程序3.用系统程序设计语言编写 二、编译程序开发技术1.自编译2.交叉编译3.自展技术4.移植三、编译程序的自动生成,91,把源语言的定义以及机器语言的描述输入到这种软件中去 , 自动生成该语言编译程序, 这就是编译程序的自动生成 , 也称编译程序生成器或编译程序的编译程序, 称 CC(Compiler-Compiler)。,编译程序 的 编译程序,编译程序,目标程序,语言的语法定义,语义描述或机器定义,源程序,数据,结果,1.5 编译程序的生成 三、编译程序的自动生成,

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:南邮计算机复试 编译原理 第一章.ppt
    链接地址:https://www.docduoduo.com/p-9493843.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开