第一章 引论(1)
第一章 引 论 第一章 引论(1) 1.1 什么叫编译程序 编译程序:是指这样的程序,它能够把某种语言的程序转换成另一种语言的程序,而后者与前者在逻辑上是等价的.如果源语言是诸如FORTRAN,Pascal,C,Ada,Smalltalk或Java这样的"高级语言",而目标语言如汇编语言之类的"低级语言"这样的翻译程序则称之为编译程序. 注意编译程序与解释程序的区别,一个语言的解释程序是着样的程序:它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身. 术语"编译"的内涵是实现从源语言表示的算法向目标语言表示的算法的等价变换. 1.2 编译过程概述 掌握编译过程的五个基本阶段,是我们学习编译原理课程的基本内容,把编译的五个基本阶段与英译中的五个步骤相比较,有利于对编译过程的理解: 英译与编译的比较 1.识别出句子中的一个个单字 2.分析句子的语法结构 3.初步翻译句子的含意 4.译文修饰 5.写出最后译文 1.词法分析 2.语法分析 3.语义分析中间代码生成 4.优化 5.目标代码生成 1.2.2语法分析 语法分析的任务:在词法分析的基础上,根据语言的语法规则,把单词符号分解成各类语法单位(语法范畴),如"短语","句子", "子句","程序段"等. 语法规则通常用上下文无关文法描述. 1.2.3语义分析与中间代码的产生 这一阶段通常包括两方面的工作首先对各种语法范畴进行静态语义检查,如果正确则进行另一方面的工作,即进行中间代码的翻译. 通常使用属性文法描述语义规则 所谓"中间代码"是一种含义明确,便于处理的记号系统. 中间代码除四元式外,还有三元式,间接三元式,逆波兰记号,树形表示等. 1.2.4 优化 优化的任务在于对前段产生的中间代码进行加工,以期在最后阶段产生更为高效(省时间和空间)的代码 优化所依循的原则是程序的等价变换规则 其方法有:公共子表达式的提取,循环优化,删除无用代码等. 1.2.5 目标代码生成 这一阶段的任务:把中间代码(或经优化处理后)变换成特定机器上的低级语言代码.它有赖于硬件系统结构和机器指令含义. 1.3 编译程序的结构 我们可以按照上页的总框图设计编译程序.从图中我们可以看到除编译的五个基本阶段外,一个完整的编译程序还应包括"表格管理"和"出错处理"两部分 1.3.2 表格与表格管理 在编译程序使用的表格中最重要的是符号表它用来登记源程序中出现的每一个名字以及名子的各种属性.如一个名字是常量名,变量名,还是过程名等;如果是变量名它的类型又是什麽,所站内存是多大,地址是什麽等. 1.3.3 出错处理 一个编译程序不仅能对书写正确的程序进行编译,而且应能对处现在源程序中的错误进行处理.如果源程序有错,编译程序应设法发现错误,把有关错误报告给用户.这部分的工作是由专门的一组程序(叫做处错处理程序)完程的. 1.3.5 编译前端与后端 前端主要由与源语言有关但与目标机无关的那些部分组成.通常包括词法分析,语法分析,语义分析与中间代码产生,有的代码优化工作,也可以包括在前端. 后端包括编译程序中与目标代码有关的部分,如与目标机有关的有关的优化,和目标代码的生成等. 1.4 编译程序的生成 以前构造编译程序大多是用机器语言或汇编语言作工具的.为了充分发挥各种不同硬件系统的效率,为了满足各种不同的具体要求,现在许多人仍然使用这种工具来构造编译程序(或编译程序的核心部分) 但是越来越多的人已经使用高级语言作工具来编译程序.因为这样可以大大节省程序设计的时间,热切构造出来的编译程序易于阅读,维护和移植. 为此我们用T形图来表示源语言S,目标语言T和编译语言I之间的关系,如果A机器上已有一个用A机器码实现的某高级语言L1的编译程序,则我们可以用L1语言编写另一种高级语言L2的编译程序,把写好的L2编译程序经过L1编译程序编译后就可得到A机器代码实现的L2编译程序. 我们还可以采用"自编译方式"产生编译程序.方法是,先对语言的核心部分构造一个小小的编译程序(可用低级语言实现),在意他为工具构造一个能够编译更多语言成分的较大编译程序.如此扩展下去,就像滚雪球一样,越滚越大,最后形成人们所期望的整个编译程序.这种通过一系列的资占途径而形成编译程序的过程叫做自编译过程. * * 1.2.1词法分析 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词(也称单词符号,或简称符号) 在词法分析阶段工作所依循的是语言的词法规则.描述词法规则的有效工具是正规式和有限自动机. 表 格 管 理 词法分析器 语法分析器 语义分析与中间代码产生 优化器 目标代码生成器 源程序 单词符号 语法单位 中间代码 中间代码 目标代码 出 错 处 理

0 类型:ppt文档
立刻下载此文档