编译原理基本知识_第1页
编译原理基本知识_第2页
编译原理基本知识_第3页
编译原理基本知识_第4页
编译原理基本知识_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、编译原理基本知识l 基本概念n 程序生成过程n 源程序-用汇编语言或高级语言编写的程序称为源程序。 n 目标程序-用目标语言所表示的程序。可以是介于源语言和机器语言之间的“中间语言”,可以是某种机器的机器语言,也可以是某机器的汇编语言。n 翻译程序-将源程序转换为目标程序的程序称为翻译程序。它是指各种语言的翻译器,包括汇编程序和编译程序,是汇编程序、编译程序以及各种变换程序的总称。l 诊断编译程序l 优化编译程序l 交叉编译程序l 可变目标编译程序汇编程序:若源程序用汇编语言书写,经过翻译程序得到用机器语言表示的程序,这时的翻译程序就称之为汇编程序,这种翻译过程称为“汇编”(Assemble)

2、。编译程序:若源程序是用高级语言书写,经加工后得到目标程序,这种翻译过程称“编译”(Compile)。n 编译器编译器就是一个程序,它读入用某种语言编写的源程序,并翻译成一个与之等价的另一种语言编写的源程序。l 编译过程的基本阶段编译过程是指将高级语言程序翻译为等价的目标程序的过程。其一般包含5个基本阶段:n 词法分析任务:分析和识别单词。描述:源程序是由字符序列构成的,词法分析扫描源程序(字符串),根据语言的词法规则分析并识别单词,并以某种编码形式输出。方法:词法分析依照词法规则,识别出正确的单词,转换成统一规格备用。转换: 对基本字,运算符,界符的转换 标识符的转换 常数的转换 转换完成后

3、的格式(类号,内码)工具:正规式和有限自动机例子1:X1 := ( 2.0 + 0.8 ) * C11 2 3 4 5 6 7 8 9例子2:Void jisuan( ) int y, c, d;float x, a, b;x = a + b * 50;y = c + d * ( x + b);基本字:Void,int,float标识符:a,b,c,d,x,y,jisuan常数:50运算符:*,+,=,-界限符: ; , ( )例子3:position = initial + rate * 60第一步:识别出单词(关键字、标识符、常数、算符和界符)。position、=、initial、+ 、

4、rate、*、60第二步:并用记号表示识别出的单词(记号表示逻辑上相关的字符序列,常用整数来表示)。id1、id2、id3表示position、initial、rate第三步:输出结果(得到记号流)。id1 = id2 + id3 * 60n 语法分析任务:根据语法规则(即语言的文法),分析并识别出各种语法成分,如表达式、各种说明、各种语句、过程、函数等,并进行语法正确性检查。方法:推导(derive)和归约(reduce)。过程:具体地说,语法分析是在记号流的基础上建立一个层次结构建立语法树。例子1:X1:= ( 2.0 + 0.8 ) * C1赋值语句的文法:<赋值语句><

5、;变量><赋值操作符><表达式> <变量><简单标识符> <赋值操作符>:= <表达式> 例子2:id1 = id2 + id3 * 60语法树 数据结构n 语义分析与生成中间代码任务:对识别出的各种语法成分进行语义分析,并产生相应的中间代码。主要工作包含(1)完成静态语义审查和处理;(2)上下文相关性审查;(3)类型匹配审查;(4)类型转换。中间代码:一种介于源语言和目标语言之间的中间语言形式。编译程序设计者可以自己设计,常用的有四元式、三元式、逆波兰表示等。四元式:四元式实际上是一种“三地址语句”的等价表示。它的

6、一般形式为:(op,arg1,arg2,result)其中,op为一个二元 (也可是一元或零元)运算符;arg1,arg2分别为它的两个运算 (或操作)对象,它们可以是变量、常数或系统定义的临时变量名;运算的结果将放入result中。四元式还可写为类似于PASCAL语言赋值语句的形式:result = arg1 op arg2。例子1:position = initial + rate * 60例子2:X1:= ( 2.0 + 0.8 ) * C1 运算符 左运算对象 右运算对象 结果 (1) + 2.0 0.8 T1(2) * T1 C1 T2(3) := X1 T2 其中T1和T2为编译程

7、序引入的工作单元四元式的语义为: 2.0 + 0.8 T1 T1 * C1 T2 T2 X1这样所生成的四元式与原来的赋值语句在语言的形式上不同,但语义上等价。n 目标代码优化任务:目的是为了得到高质量的目标程序。例子1:目的是为了得到高质量的目标程序。 优化前:(1)2.0 + 0.8 T1 (2)T1 * C1 T2 (3)T2 X1前面的四元式中第一个四元式是计算常量表达式值,该值在编译时就可以算出并存放在工作单元中,不必生成目标指令来计算,这样四元式可优化为:2.0 + 0.8 T1 (1) * T1C1 T2 (2) := X1T2n 目标代码生成任务:把中间代码变换成特定机器上的低级语言代码。目标代码形式:绝对指令代码汇编指令代码可重定位的指令代码。编译的最后阶段,它的工作与硬件系统结构和指令定义有关,这个阶段的工作很复杂,涉及到硬件系统功能部件的运用、机器指令的选择、各种数据类型变量的存储空间分配以及寄存器和后缓寄存器的调度等。由中间代码很容易生成目标程序(地址指令序列)。这部分工作与机器关系密切 ,所以要根据机器进行。在做这部分工作时(要注意充分利用累加器),也可以进行优化处理。例子1:X1 := ( 2.0 + 0.8 ) * C1注意:在翻译成目标程序的过程中,要切记保持语义的等价性。例子2:position = i

温馨提示

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

评论

0/150

提交评论