当前位置:文档之家› 程序设计语言编译原理

程序设计语言编译原理

观察一下: 源程序在不同阶段所被转换成的表示形式的不同
1.词法分析
➢ 任务: ❖ 从左到右一个字符一个字符地读入源程序,对构成源
程序的字符流进行扫描和分解,从而识别出一个个单 词(或单词符号、或简称符号、记号)。 ❖ 如基本字(begin、end、for、while等)、标识符、常数、 算符和界符(标点符号、左右括号等)。
不需重写与机器无关的部分即可改变目标机
3. 世界上第一个编译程序 Fortran,20世 纪50年代中期研制成功。
当时,人们普遍认为设计和实现编译程序是一 件十分困难的事情, 经过四十年的努力,编译理论 和技术得到迅速发展,现在已形成了一套比较成熟 的、系统化的理论与方法,并且开发出了一些好的 编译程序的实现语言、环境和工具。
§1.2 编译程序概述
从概念上来说,一个编译程序的整个工作 过程是划分成阶段进行的。每个阶段将源程序 的一种表示形式转换成另一种表示形式。各个 阶段进行的操作在逻辑上是紧密连接在一起的。
下面给出了一个编译过程的各个阶段,这是 一种典型的划分方法。
编译程序总框图
编译和解释程序
初始数据
源 程 序
(2)并且整个字符串属于赋值语句范畴。
2. 语法分析
id1 := id2 + id3 * 60 语法分析器
:=
id1
+
id2
*
id3
60
符号表
1 position . . .
2 initial . . .
3 rate
...
3. 语义分析与中间代码产生
➢ 任务: 对语法分析所识别的各类语法范畴,对各种
陈意云、张昱,编译原理及实践,高等教育出 版社,2005
陈意云、张昱,编译原理习题精选与解析,高 等教育出版社,2005
目录
❖ 概述 ❖ 词法分析 ❖ 语法分析 ❖ 语法制导的翻译 ❖ 类型检查
❖ 类型检查 ❖ 运行时存储空间的组织和管理 ❖ 中间代码生成 ❖ 代码生成 ❖ 代码优化
第1章 编译原理概论
应用软件层 语言处理系统
操作系统 裸机
2.编译程序分类(按用途和侧重性)
❖ 诊断编译程序(Diagnostic Compiler)
开发、调试
❖ 优化编译程序(Optimizing Compiler)
提高代码效率
❖ 交叉编译程序(Crossing Compiler)
产生不同于宿主机的机器代码
❖ 可变目标编译程序(Retargetable Compiler)
1. 词法分析
position := initial + rate * 60 词法分析器
符号表
1 position . . .
2 initial . . .
3 rate
...
id1 := id2 + id3 * 60
单词符号是语言的基本组成部分,是人们理解和编 写程序的基本要素。识别和理解这些要素无疑也是 翻译的基础。
如同将英文翻译成中文一样,如果对英语单词不理 解,则谈不上进行正确的翻译。
依循原则:语言的词法规则 (或语言的构词规则) 描述方法:上下文无关文法 描述工具:正规式和有限自动机
2. 语法分析
➢ 任务: ❖ 在词法分析的基础上,根据语言的语法规则,把单
词符号串分解成各类语法单元(语法范畴),如:短语、 子句、句子(语句)、程序段、程序等。
编译原理课程讲什么内容?
介绍编译器构造的一般原理和基本实现方法。
介绍的理论知识:形式语言和自动机理论、语 法制导的定义和属性文法、类型论等
强调形式描述技术和自动生成技术
强调对编译原理和技术的宏观理解,不把注意 力分散到枝节算法,不偏向于某种源语言或目 标机器
为什么开设编译原理课?
对编程语言的设计和实现有深刻的理解,对和编 程语言有关的理论有所了解,对宏观上把握编程 语言来说,起一个奠基的作用。
❖ 编译器从逻辑上可以分成若干阶段 ❖ 每个阶段把源程序从一种表示变换成另一种表
示 ❖ 通过描述编译器的各个阶段来介绍编译该课题
§1.1 什么叫编译程序
➢ 通常所说的翻译程序是指这样的一个程序: 它能够把某一种语言(称为源语言)书写的程序改 造为另一种语言书写的程序(称为目标语言)。
❖ 如果源语言是诸如FORTRAN、PASCAL、C或 JAVA这样的“高级语言”,而目标语言是诸如汇编 语言或机器语言之类的“低级语言” ,这样的一个
从软件工程看,编译器是一个很好的实例,所介 绍的概念和技术能应用到一般的软件设计之中。
大多数程序员同时是简单语言的设计者,有助于 提高对这些语言的设计水平。
在软件逆向工程、程序理解和软件安全等方面有 着广泛的应用。
教材 陈意云、张昱,编译原理,高等教育出版社,2003
参考书
A. Aho, R. Sethi, and J. D. Ullman, Compilers: Principles, Techniques, and Tools , 2nd edition, Addison-Wesley, 1986
语法成份赋予具体的意义,并分析其含义,进 行初步翻译(产生中间代码)。
➢ 通常包括两方面工作:
❖ 一般这种语法短语,也称语法单位,可表示成语法 树。
❖ 通过语法分析,确定整个输入串是否构成语法上正 确的“程序”。
❖ 词法分析 线性分析 ❖ 语法分析 层次结构分析
依循原则:语言的语法规则 描述方法:上下文无关文法
❖ 例:z : = x + 0.618 y 语法分析要识别:
(1) x+0.618y为算术表达式;

目标


程序





源程序
解 释
计 算


初始数据


解释程序和编译程序的区别
功能
解释 源程序的一 程序 个执行系统
编译 源程序的一 程序 个转换系统
工作结果
源程序的 执行结果
源程序的 目标代码

实现技术上
执行中间代码
把中间代码转 换成目标程序
解释程序和编译程序的根本区别:
是否生成目标代码
接下来,我们介绍各个阶段的任务。
翻译程序就称为编译程序。
1. 编译程序 (compiler)
编译程序在计算机系统中的作用
➢ 编译系统:一种软件,一种系统 软件。
➢ 系统软件:居于计算机系统中最 靠近硬件的一层,其他软件一般 都通过系统软件发挥作用。如编 译系统和操作系统等。
➢ 语言处理系统:把软件语言书写 的各种程序处理成可在计算机上 执行的程序,如编译系统。
相关主题