编译原理及其精选文档.ppt

上传人:石*** 文档编号:44713787 上传时间:2022-09-22 格式:PPT 页数:41 大小:2.11MB
返回 下载 相关 举报
编译原理及其精选文档.ppt_第1页
第1页 / 共41页
编译原理及其精选文档.ppt_第2页
第2页 / 共41页
点击查看更多>>
资源描述

《编译原理及其精选文档.ppt》由会员分享,可在线阅读,更多相关《编译原理及其精选文档.ppt(41页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、编译原理及其本讲稿第一页,共四十一页参考书目1 Alfred V.Aho Ravi Sethi Jeffrey D.Ullman Compilers:Principles,Techniques,and Tools 人民邮电出版社。2 Kenneth C.Louden 著 冯博琴 冯岚等译 Compiler Construction Principles and Practice 机械工业出版社。3 金成植 著,编译原理及实现,高等教育出版社。4 吕映芝,编译原理,清华大学教育出版社。本讲稿第二页,共四十一页第一章 编译引论主要内容:主要内容:l几个基本概念几个基本概念:翻译程序翻译程序汇编程序

2、汇编程序编译程序编译程序源程序源程序目标程序目标程序l编译器的组成结构、各部分之间的逻辑关系和主要功能;编译器的组成结构、各部分之间的逻辑关系和主要功能;l编译程序的实现途径编译程序的实现途径;l与编译程序相关的其他程序与编译程序相关的其他程序;编辑器编辑器预处理器预处理器连接程序连接程序装配程序装配程序调试程序调试程序本讲稿第三页,共四十一页1.1 程序设计语言和编译程序程序设计语言和编译程序从第一台计算机问世至今,半个多世纪以来,程序设计语言经历了由低级向高级的发展,从最初的机器语言、汇编语言,从第一台计算机问世至今,半个多世纪以来,程序设计语言经历了由低级向高级的发展,从最初的机器语言、

3、汇编语言,发展到较高级程序设计语言直至今天的第四代、第五代高级语言。发展到较高级程序设计语言直至今天的第四代、第五代高级语言。一、程序设计语言一、程序设计语言(一)低级语言(一)低级语言l机器语言机器语言l由能被计算机的硬件系统直接执行的机器指令组成,每条机器指由能被计算机的硬件系统直接执行的机器指令组成,每条机器指令是一串二进制代码,用机器语言编写出来的程序是一串二进制令是一串二进制代码,用机器语言编写出来的程序是一串二进制代码序列。代码序列。例:例:x+15 xy Y=x-15 否则否则本讲稿第四页,共四十一页l用用PentiumPentium机器语言编写如下程序片段:机器语言编写如下程序

4、片段:1010 1001 0001 0110 0000 0001 0011 1100 0001 1000 0000 0001 0111 1100 0000 01010010 1101 0001 0101 0000 0000 1110 1010 0000 00110000 0101 0001 0101 0000 0000 0101 0011 0001 1000 0000 0001 .0000 0000 0000 0000 0000 0000 0000 0000 l机器语言的特点:机器语言的特点:优点:执行速度快;优点:执行速度快;缺点:缺点:l难学、难记忆、难理解难学、难记忆、难理解;l机器语言

5、程序依赖于具体的机器机器语言程序依赖于具体的机器,不具备移植性;不具备移植性;本讲稿第五页,共四十一页汇编语言汇编语言将硬件指令用一些助记符表示。如将硬件指令用一些助记符表示。如ADDADD表示加法操作,表示加法操作,SUBSUB表示减法操作等等表示减法操作等等 。l用用PentiumPentium汇编语言编程示例:汇编语言编程示例:MOV AX,X CMP AX,Y JLS1 SUB AX,15 JMP S2 S1:ADD AX,15 S2:MOV Y,AX .XDWYDW本讲稿第六页,共四十一页l汇编语言的优点:比机器语言较易学、易记忆及易理解汇编语言的优点:比机器语言较易学、易记忆及易理

6、解;l汇编语言的缺点:汇编语言程序依赖于具体的机器汇编语言的缺点:汇编语言程序依赖于具体的机器,不具备移不具备移植性;植性;本讲稿第七页,共四十一页(二)高级语言(二)高级语言l高级语言:把便于理解的自然语言和数学语言结合在一高级语言:把便于理解的自然语言和数学语言结合在一起而形成的程序设计语言。起而形成的程序设计语言。l高级语言编程示例:高级语言编程示例:if (XY)then Y:=X+15 else Y:=X-15;l高级语言的优点:高级语言的优点:l比汇编语言更容易学,以人为本,面向自然表达,比汇编语言更容易学,以人为本,面向自然表达,易学、易用、易理解、易修改易学、易用、易理解、易修

7、改;l高级语言程序不依赖于具体的机器高级语言程序不依赖于具体的机器,具备移植性。具备移植性。本讲稿第八页,共四十一页l高级程序设计语言分类:高级程序设计语言分类:1 1、程序设计语言按功能分类:、程序设计语言按功能分类:科学计算用语言科学计算用语言商用语言商用语言表处理语言表处理语言图形语言图形语言公式处理语言公式处理语言串处理语言串处理语言多用途语言多用途语言 2 2、按处理问题模式分类:、按处理问题模式分类:过程式语言过程式语言函数式语言函数式语言逻辑式语言逻辑式语言对象式语对象式语 3 3、按执行模式分类:、按执行模式分类:顺序语言顺序语言并行语言并行语言本讲稿第九页,共四十一页二、高级

8、语言和汇编语言的执行二、高级语言和汇编语言的执行l翻译程序(翻译程序(Translator):它把用汇编语言或高级:它把用汇编语言或高级语言编写的程序转换成等价的机器语言程序。语言编写的程序转换成等价的机器语言程序。l汇编程序汇编程序(Assembler):汇编语言的翻译程序称为:汇编语言的翻译程序称为汇编程序汇编程序(Assembler)l编译程序编译程序(Compiler):高级语言的翻译程序称为编:高级语言的翻译程序称为编译程序译程序,也称为编译器也称为编译器。本讲稿第十页,共四十一页l源程序(源程序(Source program):编译程序的输入对象):编译程序的输入对象,它是高级语言

9、编写的程序;它是高级语言编写的程序;l目标程序(目标程序(Object program):编译程序的输出对编译程序的输出对象称为目标程序。目标程序可以是机器语言程序、象称为目标程序。目标程序可以是机器语言程序、汇编语言程序或用户自定义某种中间语言程序。汇编语言程序或用户自定义某种中间语言程序。本讲稿第十一页,共四十一页三、高级语言的执行方式三、高级语言的执行方式1.编译方式编译方式l编译阶段编译阶段:将源程序改造成另一种在逻辑上等价的目标语言程序;将源程序改造成另一种在逻辑上等价的目标语言程序;l运行阶段:在运行子程序的支持下执行目标程序。运行阶段:在运行子程序的支持下执行目标程序。运运行行子

10、子程程序序是是为为了了支支持持目目标标程程序序的的运运行行而而开开发发的的程程序序,如如系系统统提提供供的标准库函数和目标程序所调用的其它子程序。的标准库函数和目标程序所调用的其它子程序。目标程序目标程序程序的输入数据程序的输入数据运行结果运行结果高级语言高级语言 源程序源程序 编译程序编译程序 (器)(器)本讲稿第十二页,共四十一页2.解释方式解释方式接接受受某某程程序序语语言言编编写写的的源源程程序序,按按源源程程序序语语句句运运行行时时的的动动态态结结构构,直直接接逐逐句句地地分分析析、翻翻译译并并执执行行。解解释释程程序序相相当当于于源源程程序序的的抽象执行机,是语言的实现系统。抽象执

11、行机,是语言的实现系统。运行结果运行结果 解释程序解释程序 (器)(器)程序的输入数据程序的输入数据高级语言源高级语言源程序程序本讲稿第十三页,共四十一页解释器和编译器的比较解释器和编译器的比较l解释器是执行系统,编译器是转换系统。解释器是执行系统,编译器是转换系统。l 基于解释执行的程序可以动态修改自身,基于解释执行的程序可以动态修改自身,而基于编译执行的程序而基于编译执行的程序不易胜任,不易胜任,因其需要动态编译技术,难因其需要动态编译技术,难度较大。度较大。l 基于解释方式有利于人机交互。基于解释方式有利于人机交互。l 执行速度执行速度:解释器执行速度要慢。解释器执行速度要慢。l 空间开

12、销空间开销:解释器需要保存的信息较多,空间开销大。解释器需要保存的信息较多,空间开销大。l 利用解释器可自动生成编译器。利用解释器可自动生成编译器。l二者实现技术相似。二者实现技术相似。本讲稿第十四页,共四十一页3、语言的转换执行方式语言的转换执行方式l假如要实现假如要实现L L语言,现在已有语言,现在已有LL语言的编译程序,就可以语言的编译程序,就可以先把用先把用L L语言编写的程序转换成等价的语言编写的程序转换成等价的LL语言的程序,再利语言的程序,再利用用LL语言的编译程序实现语言的编译程序实现L L语言。语言。L语言编译器语言编译器 转换器转换器 L语言程序语言程序 L语言程序语言程序

13、 目标程序目标程序 本讲稿第十五页,共四十一页1.2 编译程序的逻辑结构编译程序的逻辑结构l编译程序的基本任务是将源语言程序翻译成等价的目标语言程序。编译程序的基本任务是将源语言程序翻译成等价的目标语言程序。源语言的种类成千上万,从常用的诸如源语言的种类成千上万,从常用的诸如FORTEAN,PASCAL和和C语言,到各种各样的计算机应用领域的专用语言,而目标语语言,到各种各样的计算机应用领域的专用语言,而目标语言也是成千上万的,加上编译程序根据它们构造的不同、所言也是成千上万的,加上编译程序根据它们构造的不同、所执行的具体功能的差异又分成多种类型,比如:一趟编译的、执行的具体功能的差异又分成多

14、种类型,比如:一趟编译的、多趟编译的、具有调试和优化功能的等等。尽管存在这些明多趟编译的、具有调试和优化功能的等等。尽管存在这些明显的复杂因素,任何编译程序所必需执行的主要任务基本是显的复杂因素,任何编译程序所必需执行的主要任务基本是一样的,通过理解这些任务,使用同样的基本技术,我们可一样的,通过理解这些任务,使用同样的基本技术,我们可以为各种各样的源语言和目标语言设计和构造编译程序。以为各种各样的源语言和目标语言设计和构造编译程序。本讲稿第十六页,共四十一页1.2.1 1.2.1 编译器的逻辑结构编译器的逻辑结构表表 处处 理理 目目标标代代码码生生成成中中间间代代码码优优化化中中间间代代码

15、码生生成成语语义义分分析析语语法法分分析析词词法法分分析析目目标标程程序序源源程程序序错错 误误 处处 理理 本讲稿第十七页,共四十一页l词法分析词法分析(Lexical Analysis)(Lexical Analysis)u 依依据据语言的词法规则,扫描源程序的字符序列,识别每语言的词法规则,扫描源程序的字符序列,识别每 一个单词及其一个单词及其种类,并将其表示成所谓的机内表示种类,并将其表示成所谓的机内表示TOKEN形式。形式。u单词种类单词种类:关键字关键字:if、then、for、while等等;标识符标识符;常数常数;运算符运算符 特殊符特殊符 分界符分界符:标点符号、左右括号等等

16、标点符号、左右括号等等.u单词的机内表示,即单词的机内表示,即TOKEN形式,一般包括单词属性标识和单词内码形式,一般包括单词属性标识和单词内码两个部分。两个部分。u 在词法分析阶段还要检查括号类配对等词法错误并去掉源程序中注在词法分析阶段还要检查括号类配对等词法错误并去掉源程序中注释。释。u词法分析阶段不依赖于语言的语法定义。词法分析阶段不依赖于语言的语法定义。本讲稿第十八页,共四十一页词法分析的示例词法分析的示例u某程序片段如下:VAR sum,first,count:real;BEGIN sum:=first+count*10 END.u词法分析程序扫描该程序段的字符序列,应识别出下列单

17、词序列:词法分析程序扫描该程序段的字符序列,应识别出下列单词序列:1.关键字 VAR 2.标识符 sum 3.特殊符 ,4.标识符 first 5.特殊符 ,6.标识符 count 7.特殊符 :8.关键字 real 9.特殊符 ;10.关键字 BEGIN 11.标识符 sum 12.特殊符 :=13.标识符 first 14.特殊符 +15.标识符 count 16.特殊符 *17.整形常数 10 18.关键字 END 19.特殊符 .本讲稿第十九页,共四十一页u假定单词的机内表示,即假定单词的机内表示,即TOKEN结构如下:结构如下:假定关键字假定关键字VAR、real、BEGIN及及EN

18、D的属性标识分别为的属性标识分别为15、20、23 和和 24,特殊符特殊符“,”、“:”、“:=”、“*”、“+”、“.”及及“;”的属性标识分别为的属性标识分别为30、31、32、33、34、35及及36。单词属性标识单词属性标识单词内码单词内码关键字关键字一关键字关键字一整数码空标识符标识符1标识符标识符常数常数2常数常数特殊符特殊符一特殊符特殊符一整数码空本讲稿第二十页,共四十一页u词法分析程序扫描该程序段的字符序列,生成下列词法分析程序扫描该程序段的字符序列,生成下列TOKEN序序列:列:1.(15,)2.(1,sum)3.(30,)4.(1,first)5.(30,)6.(1,co

19、unt)7.(31,)8.(20,)9.(36,)10.(23,)11.(1,sum )12.(32,)13.(1,first)14.(34,)15.(1,count)16.(33,)17.(2,10 )18.(24,)19.(35,)本讲稿第二十一页,共四十一页l语法分析语法分析(Syntax Analysis)Syntax Analysis)依据源语言的语法规则,依据源语言的语法规则,扫描源程序的字符序列扫描源程序的字符序列(当词法分析程序是语法分析程序的子程序时)(当词法分析程序是语法分析程序的子程序时)或或TokenToken序列序列(当词法分析程序是独立的一遍时)(当词法分析程序是独

20、立的一遍时),确定整个输入串是否构成一个语法上正确的程序。确定整个输入串是否构成一个语法上正确的程序。一般来说分析时发现错误输出错误位置及类型,如一般来说分析时发现错误输出错误位置及类型,如未发现错误则将未发现错误则将源程序转换成语法树的形式,目的源程序转换成语法树的形式,目的是把词法分析的结果分解成各种语法单位是把词法分析的结果分解成各种语法单位。本讲稿第二十二页,共四十一页语法分析的示例语法分析的示例lsum:=first+count*10 +:=*赋值语句表达式表达式标识符(1,sum)表达式标识符(1,first)表达式标识符(1,count)表达式常数(2,10)本讲稿第二十三页,共

21、四十一页+:=*(1,sum)(1,count)(1,first)(2,10)本讲稿第二十四页,共四十一页l语义分析语义分析(Semantic AnalysisSemantic Analysis)审查审查源程序有无源程序有无语义错误语义错误,为为代代码码生成生成 阶阶段收集段收集类类型信息。型信息。l语义错误检查又可分为类型检查和一般的语义检查。语义错误检查又可分为类型检查和一般的语义检查。类型检查主要包含以下内容:类型检查主要包含以下内容:各种条件表达式的类型是不是各种条件表达式的类型是不是boolean型型?运算符的分量的类型是否相容运算符的分量的类型是否相容?赋值语句的左右部的类型是否相

22、容赋值语句的左右部的类型是否相容?形参和实参的类型是否相容形参和实参的类型是否相容?下标表达式的类型是否为所允许的类型下标表达式的类型是否为所允许的类型?变体记录中表示情形的常量是否为合法类型变体记录中表示情形的常量是否为合法类型?函数说明中的函数类型和返回值的类型是否一致函数说明中的函数类型和返回值的类型是否一致?本讲稿第二十五页,共四十一页l除了上述类型检查外,语义分析还要进行如下一些语除了上述类型检查外,语义分析还要进行如下一些语义检查:义检查:VE中的中的V是不是变量是不是变量,而且是数组类型?而且是数组类型?V.id中的中的V是不是变量是不是变量,而且是记录类型而且是记录类型?id是

23、不是该记录是不是该记录类型中的域名类型中的域名?V中的中的V是不是指针或文件变量?是不是指针或文件变量?y+f(.)中的中的f是不是函数名是不是函数名?形参个数和实参个数是否一形参个数和实参个数是否一致致?p(.)语句中的语句中的p是不是过程名是不是过程名?形参个数和实参个数是否形参个数和实参个数是否一致一致?每个使用性标识符是否都有声明每个使用性标识符是否都有声明?在同层内有无标识符在同层内有无标识符被声明多次被声明多次?标号是否有声明标号是否有声明?有无重复声明和重复定位错误有无重复声明和重复定位错误?有无非有无非法转入错误?法转入错误?子界类型中的下界和上界类型是否相容子界类型中的下界和

24、上界类型是否相容?下界是否小于下界是否小于等于上界?等于上界?本讲稿第二十六页,共四十一页词义分析的示例词义分析的示例VAR first:real;count:char;BEGIN sum:=first+count*10 END.词义错误:词义错误:1、sum有使用而无定义;有使用而无定义;2、count为字符类型变量不能进行乘法运算。为字符类型变量不能进行乘法运算。本讲稿第二十七页,共四十一页l中间代码生成中间代码生成(Intermediate Code GenerationIntermediate Code Generation)l 为优化源程序、为编译程序便于移植和修改为优化源程序、为编

25、译程序便于移植和修改、将源程序转换成一将源程序转换成一种称为中间代码的内部表示形式。种称为中间代码的内部表示形式。l 中间代码是一种简单的含义明确的记号系统,形式有多种,常见中间代码是一种简单的含义明确的记号系统,形式有多种,常见的有后缀式(栈式)中间代码、三地址中间代码(三元式和四元式)的有后缀式(栈式)中间代码、三地址中间代码(三元式和四元式)、图结构中间代码(树,、图结构中间代码(树,DAGDAG)。)。例:例:VAR sum,first,count:real;BEGIN sum:=first+count*10 END.画线语句部分生成如下四元式形式的中间代码序列:画线语句部分生成如下四

26、元式形式的中间代码序列:1 1、(、(int-to-real,int-to-real,10,-,t,-,t1 1)2 2、(、(*,count,t,t1 1,t,t2 2)3 3、(、(+,+,first,t,t2 2,t,t3 3)4 4、(、(:=,t:=,t3 3,-,-,sum)本讲稿第二十八页,共四十一页l中间代码优化中间代码优化(Intermediate Code OptimizationIntermediate Code Optimization)在不改变源程序语义的前提下在不改变源程序语义的前提下变换或改造中变换或改造中间代码,使生成的目标代码更为高效,即间代码,使生成的目标代

27、码更为高效,即缩短运缩短运行时间或节省存储空间。行时间或节省存储空间。主要的优化方式包括:主要的优化方式包括:常量表达式优化常量表达式优化公共子表达式优化公共子表达式优化不变表达式的循环外提不变表达式的循环外提削减运算强度等削减运算强度等本讲稿第二十九页,共四十一页l目标代码生成目标代码生成(Code GenerationCode Generation)中中间间代代码变换为码变换为特定机器上的特定机器上的机器指令代码(机器指令代码(绝绝对对指令代指令代码码或可重定位的指令代或可重定位的指令代码码)或)或汇编汇编指令代指令代码码。例:sum:=first+count*10生成如下生成如下汇编汇编

28、代代码码:1.MOV count ,R22.MULT 10.0,R23.MOV first ,R14.ADD R1,R25.MOV R1,sum 本讲稿第三十页,共四十一页l表格管理表格管理(Symbol-Table Management)Symbol-Table Management)变编译程序在对源程序的分析过程中,需要创建和管理一系列变编译程序在对源程序的分析过程中,需要创建和管理一系列的表格,以登记源程序的各类信息和编译各阶段的进展情况。的表格,以登记源程序的各类信息和编译各阶段的进展情况。随着编译过程的进行需要不断的建表、查表和填表,或修改随着编译过程的进行需要不断的建表、查表和填表

29、,或修改表中的某些数据,或从表中查找相关信息,这些活动贯穿整表中的某些数据,或从表中查找相关信息,这些活动贯穿整个编译过程的始终。因此,合理的设计和使用表格是编译程个编译过程的始终。因此,合理的设计和使用表格是编译程序构造中的一个非常重要的问题。不少编译程序都设立一些序构造中的一个非常重要的问题。不少编译程序都设立一些专门子程序(称为表格管理程序)负责管理表格。专门子程序(称为表格管理程序)负责管理表格。本讲稿第三十一页,共四十一页错误处理错误处理(Error Detection and Reporting)Error Detection and Reporting)一一个个编编译译程程序序不

30、不仅仅应应能能对对书书写写正正确确的的程程序序进进行行翻翻译译,而而且且应应能能对对出出现现在在源源程程序序中中的的错错误误进进行行处处理理。错错误误包包括括词词法法错错误误、语语法法错错误误、静静态态语语义义错错误误、动动态态语语义义错错误误,其其中中动动态态语语义义错错误误只只能能在在运运行行目目标标程程序序时时才才能能发发现现。在在编编译译程程序序的的各各个个阶阶段段都都要要有有错错误误处处理理部部分分,词词法法错错误误和和语语法法错错误误都都集集中中一一次次完完成成检检查查,而而语语义义检检查查则则分分散散在在以以后后的的各各个阶段在完成别的工作时顺便完成。个阶段在完成别的工作时顺便完

31、成。本讲稿第三十二页,共四十一页1.2.2 1.2.2 遍遍(PassPass)所谓所谓“遍遍”就是对源程序或源程序的中间表示形式从就是对源程序或源程序的中间表示形式从头到尾扫描一次,并作加工处理,生成新的中间结果头到尾扫描一次,并作加工处理,生成新的中间结果或目标程序。或目标程序。本讲稿第三十三页,共四十一页1.2.3 编译程序的前端和后端编译程序的前端和后端l前端主要由与源语言有关但与目标机无关的那些前端主要由与源语言有关但与目标机无关的那些部分组成。编译前端通常包括词法分析、语法分部分组成。编译前端通常包括词法分析、语法分析、语义分析、中间代码生成,与目标机无关的析、语义分析、中间代码生

32、成,与目标机无关的中间代码优化部分也可包含在前端中间代码优化部分也可包含在前端,当然前端也包当然前端也包括相应部分的错误处理。编译前端是面向源语言的。括相应部分的错误处理。编译前端是面向源语言的。l编译后端包括与目标机有关的中间代码优化部分和编译后端包括与目标机有关的中间代码优化部分和目标代码生成等。一般来说,这些部分与源语言无目标代码生成等。一般来说,这些部分与源语言无关而仅仅依赖于中间语言。编译后端是面向目标语关而仅仅依赖于中间语言。编译后端是面向目标语言的。言的。本讲稿第三十四页,共四十一页 源程序文件源程序文件预处理器预处理器标准源程序文件标准源程序文件编译程序编译程序 汇编代码汇编代

33、码汇编程序汇编程序可重定位的目标代码可重定位的目标代码连接连接/装配程序装配程序绝对目标代码绝对目标代码高高级级语语言言程程序序到到可可执执行行代代码码的的转转换换过过程程1.3 其它与编译程序相关的程序其它与编译程序相关的程序编辑器编辑器调试程序调试程序高级语言的翻译程序高级语言的翻译程序(的核心程序的核心程序)称为编译程序称为编译程序,目标程序目标程序可以是机器语言程序、汇编语言程序或用户自定义的某种可以是机器语言程序、汇编语言程序或用户自定义的某种中间形式的语言。中间形式的语言。本讲稿第三十五页,共四十一页l编辑器(编辑器(editor)为用户输入源程序文件提供一般的编辑为用户输入源程序

34、文件提供一般的编辑功能,有的还具有语法制导的结构化功能和其它分析、功能,有的还具有语法制导的结构化功能和其它分析、提示、检查和自动提供关键字或与当前关键字相匹配的提示、检查和自动提供关键字或与当前关键字相匹配的关键字等高级编辑功能等。关键字等高级编辑功能等。l 预处理器(预处理器(preprocessor)预处理器是翻译工作开始之前由编译器调用的独立程序,预处理器是翻译工作开始之前由编译器调用的独立程序,它所做的工作包括删除源程序中的注释、执行宏替换以它所做的工作包括删除源程序中的注释、执行宏替换以及包含文件的嵌入等。及包含文件的嵌入等。l 连接程序(连接程序(linker)连接程序负责将分别

35、在不同的目标文件中编译或汇编的代码集中连接程序负责将分别在不同的目标文件中编译或汇编的代码集中到一个可执行文件中,并将目标程序和标准库函数的代码以及计到一个可执行文件中,并将目标程序和标准库函数的代码以及计算机操作系统提供的资源连接在一起。连接程序对操作系统和目算机操作系统提供的资源连接在一起。连接程序对操作系统和目标机有极大的依赖性。标机有极大的依赖性。本讲稿第三十六页,共四十一页l装配程序(装配程序(loader)装配程序用来把程序加载到内存储器中,以便执行。装配程序用来把程序加载到内存储器中,以便执行。由于用户的程序经汇编或编译后生成的目标代码通常采用相对地址由于用户的程序经汇编或编译后

36、生成的目标代码通常采用相对地址的形式,它的起始地址是不确定的,这样的代码被称为可重定位的。的形式,它的起始地址是不确定的,这样的代码被称为可重定位的。装入程序可处理所有的与指定的基地址或起始地址有关的可重定位装入程序可处理所有的与指定的基地址或起始地址有关的可重定位的地址,它使得可执行代码更加灵活。的地址,它使得可执行代码更加灵活。l调试程序(调试程序(debugger)调试程序是可在被编译了的程序中判定执行错误的程序。调试程序是可在被编译了的程序中判定执行错误的程序。本讲稿第三十七页,共四十一页l在高级语言发展的早期,这些工具都是独立的,缺乏整在高级语言发展的早期,这些工具都是独立的,缺乏整

37、体性。随着程序设计语言的发展,编辑器、预处理器、体性。随着程序设计语言的发展,编辑器、预处理器、编译器、连接程序、装配程序、调试程序及项目管理程编译器、连接程序、装配程序、调试程序及项目管理程序等这些工具往往被集成在一起,构成基于窗口的交互序等这些工具往往被集成在一起,构成基于窗口的交互式集成开发环境(式集成开发环境(IDE),集编辑、编译、调试、连接、),集编辑、编译、调试、连接、运行等功能于一体。在这种集成开发环境中,编译程序起运行等功能于一体。在这种集成开发环境中,编译程序起到核心作用。到核心作用。本讲稿第三十八页,共四十一页1.4 编译程序的实现途径一、开发编译程序的必要条件一、开发编

38、译程序的必要条件实现一个编译程序应从以下三方面入手:实现一个编译程序应从以下三方面入手:l源语言:对源语言的词法、语法和语义要有准确无误源语言:对源语言的词法、语法和语义要有准确无误 的理解,否则难以保证编译程序的正确性。的理解,否则难以保证编译程序的正确性。l目标语言:对目标语言要有很好的了解,否则会生成目标语言:对目标语言要有很好的了解,否则会生成 质量不高的目标代码。若选用机器语言作质量不高的目标代码。若选用机器语言作 为目标语言,更需要深入了解目标机的软为目标语言,更需要深入了解目标机的软 件、硬件的有关资源、环境及特点。件、硬件的有关资源、环境及特点。l编译技术:编译技术:确定对编译

39、程序的要求,如搞不搞优化,搞优化搞到哪一级等等。确定对编译程序的要求,如搞不搞优化,搞优化搞到哪一级等等。根据编译程序的规模,确定编译程序的扫描次数、每趟扫描的具体任务根据编译程序的规模,确定编译程序的扫描次数、每趟扫描的具体任务和所要采用的技术。和所要采用的技术。设计各遍扫描程序的算法并加以实现设计各遍扫描程序的算法并加以实现。本讲稿第三十九页,共四十一页二、编译程序的开发途径二、编译程序的开发途径1、预处理方法(预处理方法(转换法转换法)用于语言的扩充。设已有用于语言的扩充。设已有L语言的编译器,其扩充语言语言的编译器,其扩充语言L1的编译器可通过语的编译器可通过语言转换程序将言转换程序将

40、L1程序转换为程序转换为L程序,利用程序,利用L的编译器,从而实现的编译器,从而实现L1的编译器。的编译器。、移植法移植法 同一语言的编译器在不同机器间的移植。方法:同一语言的编译器在不同机器间的移植。方法:a.目标代码的转换目标代码的转换b.交叉编译:交叉编译:修改中间代码到目标代码的转换修改中间代码到目标代码的转换3、自展法自展法 先用目标机的汇编语言或机器语言书写源语言的子语言集先用目标机的汇编语言或机器语言书写源语言的子语言集1的编译器、再的编译器、再用源语言子语言用源语言子语言1书写源语言的子语言书写源语言的子语言2的编译器、的编译器、,直至完成源语言的编译,直至完成源语言的编译器。

41、自己编写自己的编译器。器。自己编写自己的编译器。4、工具法工具法 利用编译各个阶段的自动生成工具自动生成相应部分。如:应用利用编译各个阶段的自动生成工具自动生成相应部分。如:应用LEX自动生成词法分析器、应用自动生成词法分析器、应用YACC自动生成语法分析器。目前应用于编自动生成语法分析器。目前应用于编译器后端的工具还不很成熟。译器后端的工具还不很成熟。5、理论法(自动生成法)理论法(自动生成法)根据对编译程序的描述,由计算机自动生成编译程根据对编译程序的描述,由计算机自动生成编译程序序。目前,语法分析的自动生成工具比较成熟,但是整个编译程序的自。目前,语法分析的自动生成工具比较成熟,但是整个

42、编译程序的自动生成技术还不是很成熟,虽然有基于属性文法的编译程序自动生成器和动生成技术还不是很成熟,虽然有基于属性文法的编译程序自动生成器和基于指称语义的编译程序自动生成器,但产生目标程序的效率很低,离实基于指称语义的编译程序自动生成器,但产生目标程序的效率很低,离实用尚有一段距离。该领域的发展期待于形式化描述理论的发展。用尚有一段距离。该领域的发展期待于形式化描述理论的发展。本讲稿第四十页,共四十一页学习编译原理的目的 l 理解语言,编写出高效的代码,提理解语言,编写出高效的代码,提高软件设计技术。高软件设计技术。l 灵活设计、实现自定义语言。灵活设计、实现自定义语言。l 应用于涉及元级操作的实现。应用于涉及元级操作的实现。本讲稿第四十一页,共四十一页

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

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com