程序设计语言与编译原理-第五章编译概述课件_第1页
程序设计语言与编译原理-第五章编译概述课件_第2页
程序设计语言与编译原理-第五章编译概述课件_第3页
程序设计语言与编译原理-第五章编译概述课件_第4页
程序设计语言与编译原理-第五章编译概述课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章编译概述主要内容1.编译的一些基本概念2.编译步骤1

第一节不同语言的翻译翻译:将一种语言编写的程序转换成完全等效的另一种语言编写的程序的过程称为翻译(translate);在计算机中,翻译由一个程序来实现,称为翻译程序(translator);源程序翻译程序目标程序一.基本概念编译程序:高级语言低级语言汇编程序:汇编语言机器语言2

宿主语言:编写编译程序的语言称为宿主语言;

源语言、目标语言、宿主语言通常是不同的语言;宿主机:运行翻译程序的机器自驻留:

编译程序能生成可供其宿主机执行的机器代码自编译:

编译程序是用源语言写的交叉编译:编译程序生成的不是宿主机的机器代码,而是别的机器代码3

二.两种运行方式1.编译执行源程序编译程序目标程序初始数据目标程序运行库结果

源程序目标程序计算结果汇编语言程序目标程序编译编译运行汇编程序初始数据4

2.解释执行解释:不将源程序翻译成目标程序,而是一边分析,一边执行,这种翻译方法称为解释。

实现解释的程序,称为解释程序。1.特别适合于动态语言和交互式环境,便于人机对话2.解释器边解释边执行,重复执行的程序需要重复翻译,比编译执行花费更多时间,执行效率低;优缺点:源程序解释程序计算结果初始数据51.词法分析:输入字符串,根据词法规则识别出单词符号。2.语法分析:根据语法规则,将单词符号构成各类语法单位,并进行语法检查。3.语义分析:

根据语义规则,进行初步编译。第二节编译步骤64.优化:对中间代码进行等价变换,以使代码更有效。5.目标代码生成:生成机器语言程序或汇编语言程序。说明:(1)实用的编译程序不一定总是分成5个阶段(2)目标程序不一定能立即执行,可能还要经过连接、装入等阶段(3)编译的各阶段均需要和符号表管理程序、出错处理程序打交道78自然语言翻译过程:编译程序工作过程:识别单词分析句法初步翻译译文润饰正式翻译词法分析语法分析语义分析与中间代码产生代码优化目标代码生成91.词法分析任务:输入源程序,对字符串扫描分解、识别出单词(或单词符号、或简称符号)。单词是高级语言中有实在意义的最小语法单位,一般分为5类:保留字(begin、end、if、for、while等)、标识符、常数、运算符和分界符(标点符号、括号、注释符号等依循原则:语言的词法规则(或构词规则)描述工具:正规式和有限自动机10112.语法分析任务:在词法分析的基础上,根据语言的语法规则,从单词符号串中识别出各类语法单元(如:表达式、语句、程序段、程序等)并进行语法检查,即检查各种语法单位在语法结构上的正确性。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。依循原则:语言的语法规则描述方法:上下文无关文法12词法分析线性分析语法分析层次结构分析识别标识符,因为标识符的结构是字母打头的字母和数字串,这只要顺序扫描输入流,遇到既不是字母又不是数字字符时,将前面所发现的所有字母和数字组合在一起而构成单词标识符不能用于识别递归定义的语法成分,比如就无法仅用线性扫描去匹配表达式中的括号13词法分析线性分析语法分析层次结构分析把源程序的单词序列依照语法结构按层次分组,形成各类语法单元,组成语法短语(表示成语法树)id1=id2+id3*10Id1id2id3是变量单词序列id2+id3*10是表达式id1=id2+id3*10是"赋值语句"14语法分析所依据的是语言的语法规则,语言的语法规则通常是由递归规则来定义如表达式和赋值语句可由下述递归规则来定义:(1)任何标识符是表达式;(2)任何常数是表达式;(3)若表达式1和表达式2都是表达式,则表达式1+表达式2,表达式1*表达式2都是表达式;(4)赋值语句就可以用规则:标识符=表达式;来定义。15163.语义分析与中间代码产生任务:对语法分析所识别的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。静态语义检查:变量是否定义,类型是否正确等。若语义正确,则进行中间代码的翻译。通常包括两方面工作:17依循原则:语言的语义规则描述方法:属性文法中间代码:一种含义明确,便于处理的记号系统,通常独立于具体的硬件,或者与现代计算机的指令形式接近或者容易变换成现代计算机的机器指令。从这个阶段起,翻译工作开始18例:“四元式”三地址中间代码算符左操作数右操作数结果对语句Z=(X+0.418)Y/W序号左操作数右操作数结果算符123+

/X

T1

T20.418

Y

WT1

T2

Z还有三元式、间接三元式、逆波兰记号和树形表示等。194.优化任务:对中间代码加工变换,以期产生更为高效(时间、空间)的目标代码,公共子表达式的提取、循环优化、删除无用代码等。依循原则:程序的等价变换规则。20例:for(k=1;k<=100;k++){

M=I+10k;

N=J+10k;

}21需300次加和200次乘中间代码为:序号OPARG1ARG2结果注解(1)=1KK=1(2)j<100K(9)

若100<K转至第(9)个四元式(3)*10KT1T1=10*K;T1为临时变量(4)+IT1MM=I+T1(5)*10KT2T2=10*K;T2为临时变量(6)+JT2NN=J+T2(7)+K1KK=K+1(8)j(2)

转至第(2)个四元式(9)22仅300次加转换后的等价代码为:序号OPARG1ARG2结果注解(1)=IMM=I(2)=JNN=J(3)=1KK=1(4)j<100K(9)

若100<K转至第(9)个四元式(5)+M10MM=M+10(6)+N10NN=N+10(7)+K1KK=K+1(8)j(2)

转至第(4)个四元式(9)235.目标代码生成任务:把中间代码(或优化后)变换成特定机器上的低级语言代码。非常复杂:最后的翻译,有赖于硬件系统结构和机器指令含义,涉及到硬件功能部件的运用,机器指令的选择,各种类型变量的空间分配,以及寄存器和后援寄存器的调度等。如何产生出足以发挥硬件效率的目标代码是一件非常不容易的事情。24绝对指令代码可立即执行可重定位指令代码借助连接装配程序把各目标模块连接在一起,确定程序变量(或常数)在主存中的位置,装入内存中指定的起始地址,使之成为绝对指令代码(大多数编译程序采用)。汇编指令代码汇编器汇编之后运行目标

代码

形式25某些情况下,为加速编译速度,某些阶段可省,某些阶段也可合并,但多数实用编译程序的工作过程大致都像这五个阶段。262.表格与表格管理常见的表格:符号名表,常数表,标号表,入口名表,过程引用表。格式:名字信息一个名字常量名值变量名类型、内存大小、地址过程名地址、参数处理定义时登记处理引用时查证27例:C程序段:voidINCWAP(intM,intN){ intK;START: K=M+1; M=N+4; N=K;}28voidINCWAP(intM,intN){ intK;START: K=M+1; M=N+4; N=K;}29303.出错处理出错处理程序:发现源程序中的错误,把有关错误信息报告给用户最大限度发现各种错误,准确指出其性质及地点,并将其影响限制在尽可能小的范围,使源程序其它部分能继续被编译,以进一步发现其它可能的错误。31语法错:不符合词法规则(“非法字符”,5X,256.)、或不符合语法规则(“括号不匹配”,x=(a+(b*c)-1、“缺少;”等)。语义错:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论