第1章编译原理概况精选文档.ppt

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

《第1章编译原理概况精选文档.ppt》由会员分享,可在线阅读,更多相关《第1章编译原理概况精选文档.ppt(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第1章编译原理概况20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page1 1本讲稿第一页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page2 2 参考文献参考文献1.陈火旺,钱家桦,孙永强.程序设计语言原理.国防工业出版社,19832.杜淑敏,王永宁.编译程序设计原理.北京大学出版社,19863.俞瑞钊.数理逻辑.浙江大学出版社.1990 本讲稿第二页,共

2、六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3 3 第一章第一章 概论概论主要内容主要内容1.1.什么叫编译程序什么叫编译程序2.2.编译过程编译过程3.3.编译程序的组成编译程序的组成4.4.与编译原理有关的软件工具与编译原理有关的软件工具本讲稿第三页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4 41.11.1什么是编译程序什么是

3、编译程序 首先看一个示例:Main()int I,j;j=20;I=j+;printf(“i=%d,j=%d”,I,j);在在tubro ctubro c下存为下存为ww.cww.c文件,它是文件,它是不能执行的,必不能执行的,必须要须要compliercomplier后后生成生成ww.exeww.exe文件文件才能执行才能执行本讲稿第四页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page5 5Delphi7.0Delphi7.0的编译器的编译器的编译器的编译器VC,

4、VB,JAVAVC,VB,JAVA等都等都等都等都有自己的编译器有自己的编译器有自己的编译器有自己的编译器本讲稿第五页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page6 6什么叫编译程序什么叫编译程序(compiler)?编译程序就是在一个开发工具中编译程序就是在一个开发工具中,将高级语将高级语言写成的代码翻译成机器指令的一个程序言写成的代码翻译成机器指令的一个程序本讲稿第六页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5

5、 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page7 7(1).(1).从从功功能能上上看看,一一个个编编译译程程序序就就是是一一个个语语言言翻翻译译程程序序。它它把把一一种种语语言言(称称作作源源语语言言)书书写写的的程程序序翻翻译译成成另另一一种种语语言言(称称作作目目标标语语言言)的的等等价价的的程序程序编译程序的特点编译程序的特点 源程源程序代码序代码可执行可执行文件文件 图图1.11.1编译程序的功能编译程序的功能本讲稿第七页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分32

6、32秒秒秒秒共共共共6363页页页页,Page,Page8 8源语言源语言:FORTRAN,PASCAI,C,BASIC,FORTRAN,C+等那样的高级语言.目标语言目标语言:汇编语言或机器语言那样的低级语言,本讲稿第八页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page9 9(2 2).一一个个编编译译程程序序的的重重要要性性体体现现在在它它使使得得多多数数计计算算机机用用户户不不必必考考虑虑与与机机器器有有关关的的繁繁琐琐细节,使程序员和程序设计专家独立于机器。

7、细节,使程序员和程序设计专家独立于机器。编译程序的特点编译程序的特点 本讲稿第九页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page1010预处理编译处理汇编程序连接生成可执行文件fortranfor1pas2linkexeccompilemakebuildexe一个程序设计语言程序的典型的处理过程一个程序设计语言程序的典型的处理过程一个程序设计语言程序的典型的处理过程一个程序设计语言程序的典型的处理过程本讲稿第十页,共六十三页20072007年年年年9 9月月月月4

8、 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page1111(3).一个源程序有时可能分成几个模块存放在不同的文件里,将这些源程序汇集在一起的任务,由一个叫预处理程序的程序来完成有些预处理程序也负责宏展开,像C语言的预处理程序要完成文件合并、宏展开等任务.编译程序的特点编译程序的特点 本讲稿第十一页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page1212(4)代码形式,需要经由汇编程序翻译成可

9、在装配的机器代码,一个编译程序的输入可能一个或多个预处理程序来产生,另外,为得到能运行的机器代码,编译程序的输出可能仍需要进一步地处理。编译程序的特点编译程序的特点 本讲稿第十二页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page1313(1)第一个编译程序出现在20世纪5O年代早期,多数早期的编译工作是将算术公式翻译成机器代码。用现在的标准来衡量,当时的编译程序能完成的工作十分初步,如只允许简单的单目运算,数据元素的命名方式有很多限制然而它们奠定了对高级语言编译系统

10、的研究和开发的基础、编译程序的发展 本讲稿第十三页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page1414(2)20世纪50年代中期出现了FORTRAN等一批高级语言,相应的一批编译系统开发成功编译程序的发展 (3)20世纪50年代末有人开始研究编译程序自动生成工具,提出并研制编译程序的编译程序、它的功能是以任一语言的词法规则、语法规则和语义解释出发,自动产生该语言的编译程序。目前很多自动生成工具已广泛使用,如词法分析程序的生成系统LEX,语法分析程序的生成系统YA

11、CC等本讲稿第十四页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page1515(4)20世纪60年代起不断有人使用自展技术来构造编译程序自展的主要特征是用被编译的语言来书写该语言自身的编译程序,编译程序的发展 (5)1971年,PASCAL的编译程序用自展技术生成后,其影响就越来越大。(6)随着并行技术和并行语言的发展处理并行语言的并行编译技术正在深入研究之中将串行程序转换成并行程序的自动并行编译技术也正在深入研究之中。本讲稿第十五页,共六十三页20072007年年年

12、年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page1616 编译程序完成从源程序到目标程序的翻译是一个复杂的整体的过程 目标程序=Translation(源程序)从概念上来讲,一个编译程序的整个工作过程是划分成阶段进行的。每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的 1.1.2 2编译过程编译过程本讲稿第十六页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共

13、6363页页页页,Page,Page1717词法分析词法分析语法分析语法分析语义分析语义分析中间代码的生成中间代码的生成代码的优化代码的优化目标代码生成目标代码生成表表格格管管理理出出错错处处理理图图1.31.3编译程序的阶段划分编译程序的阶段划分一种典型的一种典型的划分方法划分方法本讲稿第十七页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page1818词法分析、词法分析、单词单词=T1(=T1(源程序源程序)语法分析、语法分析、语句语句=T2(T2(单词)单词)语义

14、分析、语义分析、语句语句=T3T3(语句)(语句)中间代码生成、中间代码生成、中间代码中间代码=T4T4(语句语句)代码优化、代码优化、代码代码=T5T5(中间代码)(中间代码)目标代码生成、目标代码生成、目标代码目标代码=T6T6(代码)(代码)六个阶段。六个阶段。目标程序目标程序=Translation(Translation(源程序源程序)的分解的分解本讲稿第十八页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page1919表格管理和出错处理与上述个阶段都有联系

15、表格管理和出错处理表格管理和出错处理本讲稿第十九页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page2020A.任务:词法分析阶段是编译过程的第一个阶段,这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称词符号或符号)(1)1)词法分析词法分析本讲稿第二十页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共636

16、3页页页页,Page,Page2121这里所谓的单词是指逻辑上紧密相连的一组宇符,这些字符具有集体含义比如标识符是由字母字符开头,后跟字母、数字字符的字符序列组成的一种单词保留字(关键字或基本字)是一种单词,此外还有算符,界符等等例如某源程序片断如下:B.B.单词的含义单词的含义本讲稿第二十一页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page2222Begin Begin Var sum,firtVar sum,firt,countcount:realreal;su

17、m:=firstsum:=firstcount*10 count*10 endend 词法分析阶段将构成这段程序的字符组成了词法分析阶段将构成这段程序的字符组成了如下单词序列:如下单词序列:C.词法分析实例本讲稿第二十二页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page23231 1保留字保留字 begin 2begin 2begin 2begin 2保留字保留字 varvar3 3 3 3标识符标识符标识符标识符sum 4sum 4sum 4sum 4逗逗 号号

18、,5 5 5 5标识符标识符标识符标识符 first 6first 6first 6first 6逗逗逗逗 号号号号 ,7 7 7 7标识符标识符标识符标识符 count 8count 8count 8count 8冒冒冒冒 号号号号 :9 9保留字保留字real 10real 10real 10real 10分分 号;号;11111111 标识符标识符标识符标识符sum 12sum 12赋值号:赋值号:=13131313标识符标识符标识符标识符first 14 first 14 加加 号号 十十 15151515标识符标识符标识符标识符 count 16count 16count 16cou

19、nt 16乘乘乘乘 号号号号*17171717整数整数整数整数10 18 10 18 10 18 10 18 保留字保留字保留字保留字endend19191919 界界 符符 本讲稿第二十三页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page2424 使用使用id1,id2id1,id2和和id3id3分别表示分别表示sumsum,firstfirst和和countcount三个标识符的内部形式,那么经过词三个标识符的内部形式,那么经过词法分析后上述程序片断中的赋值语

20、句法分析后上述程序片断中的赋值语句 sum:=firstsum:=firstCount*10Count*10则则表示为表示为id1:=id2id1:=id2id3*10 id3*10 D.D.词法分析另一任务词法分析另一任务本讲稿第二十四页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page2525语法分析是编译过程的第二个阶段。A.语法分析任务:是在词法分析的基础上将单词序列分解是在词法分析的基础上将单词序列分解成各类语法短语,如成各类语法短语,如“程序程序”“语句语

21、句”,“表表达式达式”等等等等一般这种语法短语,也称语一般这种语法短语,也称语法单位法单位(2)(2)语法分析语法分析本讲稿第二十五页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page2626将将语法单位转换成语法树语法单位转换成语法树B B语法分析任务之二语法分析任务之二比如上述程序段中的单词序列:比如上述程序段中的单词序列:id1:=id2id1:=id2id3*10id3*10经语法分析得知其是经语法分析得知其是PASCALPASCAL语言的语言的“赋值语句赋值

22、语句”,表示成如图,表示成如图1.41.4所示的语法树或是图所示的语法树或是图1.51.5所所示的那种形式示的那种形式 本讲稿第二十六页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page2727赋值语句赋值语句标识符标识符Id1(sum)Id1(sum):=:=表达式表达式表达式表达式表达式表达式表达式表达式表达式表达式+*标识符标识符Id2(first)Id2(first)标识符标识符Id3(count)Id3(count)整数整数1010语句语句id1:=id2+

23、id3*10id1:=id2+id3*10的语法树的语法树本讲稿第二十七页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page2828:=id1+id2*id310图图1.51.5语句语句id1:=id2+id3*10id1:=id2+id3*10的语法树另一种形式的语法树另一种形式简化的语法简化的语法树树本讲稿第二十八页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363

24、页页页页,Page,Page2929(A)A)语法分析所依据的是语言的语法分析所依据的是语言的语法规则语法规则,即描,即描述程序结构的规则通过语法分析确定整个输入述程序结构的规则通过语法分析确定整个输入串是否构成一个语法上正确的程序串是否构成一个语法上正确的程序 C C怎样进行语法分析规则怎样进行语法分析规则本讲稿第二十九页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3030(B)程序的构成规则通常是递规法则表示:例:表达式的递规规则定义:1)任何标识符是表达式

25、。2)任何常数(整常数、实常数)是表达式3)若表达式1和表达式2都是表达式那么;表达式1+表达式2 表达式1*表达式2 (表达式1)都是表达式语法规则的表示语法规则的表示本讲稿第三十页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3131例如:语句也可以递归地定义,如例如:语句也可以递归地定义,如 1 1)标识符)标识符:=:=表达式表达式 是语句。是语句。2 2)whilewhile(表达式)(表达式)do do 语句和语句和 IFIF(表达式)(表达式)the

26、n then 语句语句else else 语句语句 都是语句。都是语句。上述赋值语句;上述赋值语句;id1:=id2id1:=id2id3*10id3*10之所以能之所以能表示成图表示成图1.41.4的语法树,依据的是赋值语句的语法树,依据的是赋值语句和表达式的定义规则。和表达式的定义规则。实例分析实例分析本讲稿第三十一页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3232词法分析的任务仅对源程序进行线性扫描词法分析的任务仅对源程序进行线性扫描即可完成,比如识别

27、标识符,因为标识符的即可完成,比如识别标识符,因为标识符的结构是字母开头的字母和数字串,这只要顺结构是字母开头的字母和数字串,这只要顺序扫描输入流,遇到既不是字母又不是数字序扫描输入流,遇到既不是字母又不是数字字符时,将前面所发现的所有字母和数字组字符时,将前面所发现的所有字母和数字组合在一起而构成单词标识符、但这种线性扫合在一起而构成单词标识符、但这种线性扫描则不能用于识别递归定义的语法成分,比描则不能用于识别递归定义的语法成分,比如就不能用此办法去匹配表达式中的括号如就不能用此办法去匹配表达式中的括号 D.D.词法分析和语法分析本质区别词法分析和语法分析本质区别本讲稿第三十二页,共六十三页

28、20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3333A A语义分析阶段任务语义分析阶段任务 是审查源程序有无语义错误,为代是审查源程序有无语义错误,为代码生成阶段收集类型信息。码生成阶段收集类型信息。(3)(3)语义分析阶段语义分析阶段本讲稿第三十三页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3434(A).(A).比如语义分析的一个工作是

29、进行类型审比如语义分析的一个工作是进行类型审查查,审查每个算符是否具有语言规范允许的审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时编译程序应运算对象,当不符合语言规范时编译程序应报告错误。报告错误。(B).(B).如有的编译程序要对实数用作数组下标如有的编译程序要对实数用作数组下标的情况报告错误。的情况报告错误。B B语义分析实例语义分析实例本讲稿第三十四页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3535(C).(C).又比如某些语言规定运算

30、对象可被强制,又比如某些语言规定运算对象可被强制,那么当二目运算施于一整型和一实型时,那么当二目运算施于一整型和一实型时,编译程序应将整型转换成实型而不能认为是编译程序应将整型转换成实型而不能认为是源程序的错误。源程序的错误。本讲稿第三十五页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3636假如在语句假如在语句sum:=fitstsum:=fitstcount*10count*10中的两个中的两个运算对象;运算对象;countcount是实型,是实型,1010

31、是整型,则语是整型,则语义分析阶段进行类型审查之后,在语法分义分析阶段进行类型审查之后,在语法分析所得到的分析树上增加一语义处理结点,析所得到的分析树上增加一语义处理结点,表示整型变成实型的一目算符表示整型变成实型的一目算符inttoreal,inttoreal,则图则图1.51.5的树变成图的树变成图 1.6 1.6所示的那样。所示的那样。C C语义分析实例语义分析实例本讲稿第三十六页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3737:=10id1+id2*

32、id3inttoreal图图1.5 语句语句id1:=id2+id3*10插入语义节点的语法树插入语义节点的语法树语义分析实例语义分析实例本讲稿第三十七页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3838 A.A.任务任务:在进行了上述的语法分析和语义分析阶段的在进行了上述的语法分析和语义分析阶段的工作之后,工作之后,有的编译程序将源程序变成一种有的编译程序将源程序变成一种内部表示形式,内部表示形式,这种内部表示形式叫做中间这种内部表示形式叫做中间语言或中间代

33、码语言或中间代码“中间代码中间代码”是一种是一种结构简单、含义明确的记号系统,结构简单、含义明确的记号系统,(4 4)中间代码生成)中间代码生成本讲稿第三十八页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page3939a).a).多种多样的形式,多种多样的形式,b).b).重要的设计原则为两点:重要的设计原则为两点:一是容易生成;一是容易生成;二是容易将它翻译成目标代码二是容易将它翻译成目标代码B.B.记号系统可以设计记号系统可以设计本讲稿第三十九页,共六十三页200

34、72007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4040很多编译程序采用了一种近似“三地址指令”的四元式”中间代码,这种四元式的形式为:(运算符,运算对象运算符,运算对象1 1,运算对象,运算对象2 2,结果,结果)C.C.四元式记号系统四元式记号系统本讲稿第四十页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4141比如源程序比如源程序 sum:=fi

35、rstsum:=firstCount*10Count*10可生成四可生成四元式序列,如图元式序列,如图1.71.7所示所示:(1)(1)(inttoreal 10 inttoreal 10 -t1)t1)(2)(*id3 t1 t2)(2)(*id3 t1 t2)(3)(+(3)(+id2 t2 t3)id2 t2 t3)(4)(:=(4)(:=t3 -id1)t3 -id1)中中ti(i=l,2,3ti(i=l,2,3)是编译程序生成的临时名字,)是编译程序生成的临时名字,用于存放运算结的。用于存放运算结的。D.D.四元式中间代码实例四元式中间代码实例本讲稿第四十一页,共六十三页200720

36、07年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4242 在此阶段的任务是对前阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。(5)(5)代码优化代码优化本讲稿第四十二页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4343(1)(1)(inttoreal 10 inttoreal 10 -t1)t1)(2)(*id3

37、(2)(*id3 t1 t2)t1 t2)(3)(+(3)(+id2 t2 t3)id2 t2 t3)(4)(:=(4)(:=t3 -id1)t3 -id1)可变换为(1)(*(1)(*id3 10.0 t1)id3 10.0 t1)(2)(+(2)(+id2 t1 id1)id2 t1 id1)代码优化实例代码优化实例本讲稿第四十三页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4444这一阶段的任务是把中间代码变换成特这一阶段的任务是把中间代码变换成特定机器上

38、的绝对指令代码或可重定位的定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码指令代码或汇编指令代码 (6)(6)目标代码生成目标代码生成本讲稿第四十四页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4545这是编译的最后阶段,它的工作与硬件系统这是编译的最后阶段,它的工作与硬件系统结构和指令含义有关,这个阶段的工作很复结构和指令含义有关,这个阶段的工作很复杂,涉及到硬件系统功能部件运用、机器指杂,涉及到硬件系统功能部件运用、机器指令的选择、各种数据类型变量的

39、存储空间分令的选择、各种数据类型变量的存储空间分配以及寄存器和后缓寄存器的调度等配以及寄存器和后缓寄存器的调度等 目标代码生成相关因素目标代码生成相关因素本讲稿第四十五页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4646用两个寄存器(用两个寄存器(R1和和R2)可能生成如图)可能生成如图 1.9的某汇编代码的某汇编代码 (1)MOVF id3 ,R2 (2)MULF#10.0,R2 (3)MOVF id2 ,R1 (4)ADDF R1 ,R2 (5)MOV R

40、1 ,idl 目标代码生成实例目标代码生成实例本讲稿第四十六页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4747第一条指令将第一条指令将 id3的内容送至寄存器的内容送至寄存器 R2,第二条指令将其与实常数第二条指令将其与实常数 10 0相乘。这里相乘。这里 用表明用表明10.0处理为常数,处理为常数,第三条指令将第三条指令将id2 移至寄存器移至寄存器R1,第四条指令加上前面计算出的第四条指令加上前面计算出的R2中的值中的值,第五条指令将寄存器第五条指令将寄

41、存器RI的值移到的值移到id1地址中地址中 目标代码生成实例的解释目标代码生成实例的解释本讲稿第四十七页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4848(1)前面提到过上述编译过程的阶段划分是一理想处理模式。(2)事实上并非所有的编译程序都分成这样几个阶段、有些编译程序并不要生成中间代码有些编译程序不进行优化优化阶段即可省去,(3)有些最简 编译程序在语法分析的同时产生目标指令代码。如第2章介绍的PL0语言编译程序总结总结本讲稿第四十八页,共六十三页2007

42、2007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page4949编编译过程的六个阶段的任务,再加上表格编编译过程的六个阶段的任务,再加上表格管理和出错处理的工作可分别由几个模块或管理和出错处理的工作可分别由几个模块或程序完成,它们分别称作程序完成,它们分别称作:词法分析程序、词法分析程序、语法分析程序、语法分析程序、语义分析程序、语义分析程序、中间代码生成程序、中间代码生成程序、1 13 3编译程序的结构编译程序的结构本讲稿第四十九页,共六十三页20072007年年年年9 9月月月月4 4日星

43、期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page5050代码优化程序、目标代码生成程序、表格管理程序 出错处理程序 从而可给出,个典型的编译程序结构框图,如图 1.10所示。本讲稿第五十页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page5151词法分析程序词法分析程序语法分析程序语法分析程序语义分析程序语义分析程序中间代码的生成程序中间代码的生成程序代码的优化程序代码的优化程序目标代码生成程序目标

44、代码生成程序表表格格管管理理程程序序出出错错处处理理程程序序编译程序的结构图编译程序的结构图本讲稿第五十一页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page5252(a)常常把编译的过程分为常常把编译的过程分为:前端(前端(front end)后端(后端(back end)编译程序的几点重要说明编译程序的几点重要说明本讲稿第五十二页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共

45、共共共6363页页页页,Page,Page5353前端由主要依赖于源语言而与目标机无关前端由主要依赖于源语言而与目标机无关阶段组成。通常这些阶段包括:阶段组成。通常这些阶段包括:词法分析、词法分析、语法分析、语法分析、语义分析语义分析 中间代码生成中间代码生成 某些优化工作也可在前端做,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处也包括与前端每个阶段相关的出错处理和符号表管理工作。理和符号表管理工作。本讲稿第五十三页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Pag

46、e,Page5454后端工作指那些依赖于目标机而一般不依后端工作指那些依赖于目标机而一般不依赖源语言,只与中间码有关那些阶段赖源语言,只与中间码有关那些阶段:目标代码生成,目标代码生成,以及相关出错处理和符号表操作以及相关出错处理和符号表操作 后端后端本讲稿第五十四页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page5555(b)b)若按照这种组合方式实现编译程序,若按照这种组合方式实现编译程序,可以设想,某一编译程序的前端加上相应可以设想,某一编译程序的前端加上相应

47、不同的后端则可以为不同的机器构成同一不同的后端则可以为不同的机器构成同一个源语言的编译程序。个源语言的编译程序。(c)c)也可以设想,不同语言编译的端生成也可以设想,不同语言编译的端生成同一种中间语言,再使用一个共同的后端,同一种中间语言,再使用一个共同的后端,则可为同一机器生成几个语言的编译程序。则可为同一机器生成几个语言的编译程序。本讲稿第五十五页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page5656为了提高编程效率,缩短调试时间,为了提高编程效率,缩短调试时

48、间,软件工作人员研制了不少对源程序软件工作人员研制了不少对源程序处理的工具。这些工具的开发不同处理的工具。这些工具的开发不同程度地用到编译程序各个部分的技程度地用到编译程序各个部分的技术和方法,下面仅是一些例子。术和方法,下面仅是一些例子。1.1.4 4编译原理的应用编译原理的应用本讲稿第五十六页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page5757结构化编辑器是引导用户在语言的语法制导下编制程序能自动地提供关键字和与其匹配的关键字,如if后必须有then,beg

49、in和end的配对,左右括号的配对等这样可以减少语法上的错误,可加快对源程序的调试,提高效率和质量。1 1).语言的结构化编辑器语言的结构化编辑器本讲稿第五十七页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page5858调试是软件开发过程中一个重要环节,结构化编辑器只能解决语法错误的问题,而对一个已通过编译的程序来说需进一步了解的是程序执行的结果与编程人员的意图是否一致,程序的执行是否实现预计的算法和功能、这种对算法的错误或程序没能反应算法的功能等错误就需用调试器来协

50、助解决、调试器的功能愈强,实现愈复杂,但它必须与语法分析、语义处理有紧密联系。2 2).语言程序的调试工具语言程序的调试工具本讲稿第五十八页,共六十三页20072007年年年年9 9月月月月4 4日星期二日星期二日星期二日星期二5 5时时时时1212分分分分3232秒秒秒秒共共共共6363页页页页,Page,Page5959语言程序的测试工具有两种静态分析器和动态测试器。静态分析器是对源程序进行静态地分析、它对源程序进行语法分析并制定相应表格,检查变量定值与引用的关系、如某变量未被赋值就被引用,或定值后未被引用,或多余的源代码等一些编译程序的语法分析发现不了的错误。3 3).语言程序测试工具语

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

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

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁