预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共40页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第一章绪论第一章引论第一章引论2、《ModernCompilerDesign》 中文名字叫做《现代编译程序设计》,此书比较关注的是编译原理的实践,书中给出了不少的实际程序代码,还有很多实际的编译技术问题等等。 此书另外一个特点就是其“现代”而字。在传统的编译原理教材中,你是很少能看到如同Java中的“垃圾回收”等算法的。 如果你想深入学习编译原理的理论知识,那么你肯定得看前面那本龙书,如果你想自己动手做一个先进的编译器,那么你得看这本《现代编译程序设计》。第一章引论第一章引论在解决其他复杂的问题时,可以借鉴编译原理的思想,不一定是编译程序具体的实现模式,而是解决编译问题时的思考方法。 在20世纪50年代,编译器的编写一直被认为是十分困难的事情,第一Fortran的编译器据说花了18年的时间才完成。 在人们尝试编写编译器的同时,诞生了许多跟编译相关的理论和技术,而这些理论和技术比一个实际的编译器本身价值更大。 就犹如数学家们在解决著名的哥德巴赫猜想一样,虽然没有最终解决问题,但是其间诞生不少名著的相关数论。1.1程序设计语言和编译程序 1.2编译程序的历史及发展 1.3编译过程与编译程序结构 1.4编译程序的开发 1.5构造编译程序所应具备的知识内容 计算机语言 低级语言——面向机器 主要包括:机器语言、汇编语言 特点:与特定的机器有关,功效高,但使用复杂、繁 琐、费时、易出错。 高级语言——面向用户 如:Fortran、Pascal、C、Java语言等 特点:不依赖具体机器,移植性好、对用户要求低、易使用、易维护等。 高级语言程序的执行方式 编译 解释 计算机系统的组成: 裸机,系统程序(操作系统、编译程序、解释程序、程序设计语言、连接装配程序、系统实用程序等),应用程序。 编译程序就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序,见图1–1。一个高级语言程序的执行通常分为两个阶段: 编译阶段和运行阶段。 编译阶段将源程序变换成目标程序。 运行阶段则由所生成的目标程序连同运行系统(数据空间分配子程序、标准函数程序等)接受程序的初始数据作为输入,运行后输出计算结果。如果编译生成的目标程序是汇编语言形式的,那么在编译与运行阶段之间还要添加一个汇编阶段,它将编译生成的汇编语言目标程序再经过汇编程序变换成机器语言目标程序,如图1–3所示。用高级语言编写的程序也可通过解释程序来执行。解释程序也是一种翻译程序,它将源程序作为输入,一条语句一条语句地读入并解释执行。 解释程序与编译程序的主要区别是:编译程序将源程序翻译成目标程序后再执行该目标程序;而解释程序则逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并不产生目标程序。典型的解释型高级语言是BASIC语言。1.3编译过程和编译程序结构1.词法分析 词法分析的任务是输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号,如基本字(if、for、begin等)、标识符、常数、运算符和界符(如“(”、“)”、“=”、“;”)等, 将所识别出的单词用统一长度的标准形式(也称内部码)来表示,以便于后继语法工作的进行。 因此,词法分析工作是将源程序中的字符串变换成单词符号流的过程。 词法分析所遵循的是语言的构词规则(词法规则)。2.语法分析 语法分析的任务是在词法分析的基础上,根据语言的语法规则(文法规则)把单词符号流分解成各类语法单位(语法范畴),如“短语”、“子句”、“句子(语句)”、“表达式”、“程序段”和“程序”等。 通过语法分析可以确定整个输入串是否构成一个语法上正确的“程序”。 语法分析所遵循的是语言的语法规则,语法规则通常用上下文无关文法描述。形式语言学(代数语言学)上下文无关文法 文法——描述语言的语法结构的形式规则(即语法规则)。 上下文无关文法——它是这样一种文法,它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。 举例: 程序语言中,当碰到一个算术表达式时,对它“就事论事”进行处理,不必考虑它所处的上下文。 自然语言中,一个句子,一个词,它们的语法性质和所处的上下文往往有密切的关系。 3.语义分析和中间代码生成 这一阶段的任务是对各类不同语法范畴按语言的语义进行初步翻译,包含两个方面的工作: 一是对每种语法范畴进行静态语义检查,如变量是否定义、类型是否正确等; 二是在语义检查正确的情况下进行中间代码的翻译。 中间代码是介于高级语言的语句和低级语言的指令之间的一种独立于具体硬件的记号系统,它既有一定程度的抽象,又与低级语言的指令十分接近,因此转换为目标代码比较容易。 把语法范畴翻译成中间代码所遵循的是语言的语义规则,常见的中间代码有四元式、三元式、间接三元式和逆波兰记号等。4