第一章 编译原理概述
- t1 )
( * id3 60.0 t2 )
id3 t1 t2 ) id2 t2 t3 ) t3 id1 )
编 译 程 序
源 程 序
汇 编 语 言
汇 编 程 序
目 标 代 码
初 始 数 据
目运 标行 代子 码程 序 运行时
计 算 结 果
编译时
汇编时
.exe
编译原理
2015年4月25日
.obj
18
高 级 语 言 程 序 的 处 理 过 程
编译原理
2015年4月25日
19
解释程序
以源程序作为输入,不产生目标程序,一边 解释一边执行
编译原理
2015年4月25日
3
课程概述-3:学习任务
• 掌握编译理论基础和形式化系统(过程、思 想,对其思想用数学格式描述)
• 了解编译的全过程及其具体实现方法
编译原理
2015年4月25日
4
课程概述-4:学习方法
• 认真听课,理论书中基本概念、基本原理与 基本算法(枯燥,原理性强,数学性强,符 号多,自己看书比较麻烦) • 弄懂书中例题和认真对待课后习题 • 在看书或理解例题时,一定要划出相应的细 节变化过程,通过画图来加深理解 • 在理解基础上记忆(算法原理概念都是经典 内容)
28
相关术语
• 词法分析(lexical analysis or scanning) --The stream of characters making up a source program is read from left to right and grouped into tokens,which are sequences of characters that have a collective meaning. • 单词---token • 保留字---reserved word • 标识符 ---identifier(user-defined name)
编译原理
2015年4月25日
34
三、语义分析及中间代码生成
任务:依据语义规则对识别出的各种语法成分析其 含义,并进行初步翻译,生成中间代码。
•静态:
分析语法成份的含义,进行语义上的正确性检查 •动态: 根据相应语义,生成中间代码(介于源语言和目 标语言之间的中间语言形式)
编译原理
2015年4月25日 35
优化举例
t1 = b* c t2 = t1+ 0 t3 = b* c t4 = t2 + t3 a = t4 t1 = b* c t2 = t1 + t1 a = t2
编译原理
2015年4月25日
39
优化举例
(1) (inttoreal 60
(2) ( (3) ( (4) ( * + :=
id1:= id2 + id3 * 60
汇编程序与编译程序都是翻译程序,主要区别是加工对象的 不同。由于汇编语言格式简单,常与机器语言之间有一一对 应的关系。汇编程序所要做的翻译工作比编译程序简单的多。
编译原理
2015年4月25日 14
源程序的编译和运行
• 编译或汇编阶段
源程序 编译程序 或汇编程序 目标程序
• 运行阶段
输入数据
目标程序 + 运行子程序
编译原理
2015年4月25日
BNF表示
30
语法分析的依据——语法规则
描述程序结构的规则 赋值语句 A::=V:=E E::=T | E+T T::=F | T*F F::=V | (E) | C V::=标识符 C::=常数
2015年4月25日
递 归 定 义
31
编译原理
position:= initial + rate * 60
《编译原理》
主讲:何 菊 hjojh@ B4418 85811572(O) 教材 《编译原理》 吕映芝等编 清华大学出版社 参教 《编译原理》 陈火旺编 国防科技大出版社
编译原理
2015年4月25日 1
课程概述-1:课程地位
• 计算机专业的专业基础课,主要解决高 级语言的运行问题 • 是软件技术的基础 • 计算机专业学生必修的一门主干课程 • 是本学科研究生入学考试的课程之一
2.理解编译程序总的框架,明确编译程序工 作的基本过程及各阶段的基本任务
编译原理
2015年4月25日
8
程序设计语言
• 自然语言——人与人交流的一种工具 • 人与计算机如何交流
?
通过程序设计语言将问题编写成程序 ,计算机按程序的计算步骤计算出结 果
编译原理
2015年4月25日 9
程序设计语言
• 低级语言(Low level Language)
OBJECT PROGRAM
即源程序是翻译程序的输入,目标程序是翻译程序的输出
编译原理
2015年4月25日
13
•汇编程序
若源程序用汇编语言书写,经过翻译程序得到用机器语言 表示的程序,这时的翻译程序就称之为汇编程序,这种翻译过 程称为“汇编”(Assemble)
•编译程序
若源程序是用高级语言书写,经加工后得到目标程序,上述 翻译过程称“编译”(Compile)
编译 (笔译,程序到程序)由高级语言转换为低
级语言,如C,Pascal语言
解释 (口译,语句到语句)接受某高级语言的一
个语句输入,进行解释并控制计算机执行,马上得 到这句的执行结果,然后再接受下一句。不产生目 标程序,直观简单,但效率低,如Basic语言
编译原理
2015年4月25日 21
编译和解释
源程序
• 工作过程
输入数据
解释程序
输出数据
• 特点:与编译系统比较,解释系统较简单、 可移植性好,易于查错,但速度慢 不产生目标程序,每次执行源程序,都必须解释一次 编译原理
2015年4月25日 20
程序设计语言的转换
翻译:能把某种语言的源程序,在不改变语义 的条件下,转换成另一种语言程序——目标语 言程序。 两种实现方式:
赋值语句
id1:=id2+id3*60
标识符 Id1 := 表达式
表达式
+
表达式
标识符 Id2
编译原理
表达式 标识符 Id3
*
表达式 整数 60
32
2015年4月25日
id1:=id2+id3*60
:=
id1 Position id2 initial
+
* id3 rate
2015年4月25日
N 60
x
t2
t3 y
其中t1、t2、t3为编译程序引入的临时工作单元
编译原理
2015年4月25日 37
四、代码优化
•任务:对中间代码进行加工变换,以得到高质 量(省时间、省空间)的目标代码
•依据原则:程序的等价变换规则
•主要优化内容 公共子表达式提取、合并已知量、删除 无用赋值语句、循环优化等
编译原理
2015年4月25日 38
编码形式
单词:是语言的基本语法单位
<1>保留字(如:if、else、while)
<2>标识符(如:max、min、str)
<3>常数
(如:12、6.8、’a’)
2015年4月25日 26
<4>算符、界符(如:+、-、*、/、;、(、) )
编译原理
词法分析程序的结果-----二元式
y=x+r*6
单词值
•翻译程序
将源程序转换为目标程序的程序称为翻译程序。它是 指各种语言的翻译器,包括汇编程序和编译程序,是汇编 程序、编译程序以及各种变换程序的总称。
编译原理
2015年4月25日 12
S
O I
源程序、翻译程序、目标程序 三者关系:
源程序
SOURCE PROGRAM
翻译程序
TRANSLATER
目标程序
编 译 程 序 编译时
术语
源 程 序
(*.C / *.PAS)
目 标 代 码
(*.OBJ / *.EXE)
初 始 数 据
目运 标行 代子 码程 序 运行时
计 算 结 果
编译程序的源语言(源程序)
编译原理 编译程序的目标语言 (目标程序)
2015年4月25日 17
编译的过程转换
三阶段转换:编译—汇编—运行
• 编译程序是源程序的一个转换系统 • 解释程序是源程序的一个执行系统 • 两者在实现技术上并无很大差别,都要完 成词法分析、语法分析、语义
1.2 编译过程和编译程序的结构
• 翻译和编译工作的比较
翻译外文 分析 编译程序 识别单词 词法分析 分析句子 语法分析 根据语义进 语义分析、生成中间代码 行初步翻译
y = x + r * 6
编译原理
单词类别
标识符 算符(赋值) 标识符 算符(加号) 标识符 算符(乘号) 常数
2015年4月25日 27
Void jisuan() { int y,c,d; float x,a,b; x=a+b*50; y=c+)d*(x+b; }
请识别上段代码中的单词
编译原理
2015年4月25日
生成中间代码的目的:
• 利于代码优化 • 利于目标代码的移植
中间代码的形式:
• 四元式、三元式、逆波兰表示
编译原理
2015年4月25日
36
四元式
例:y = x + r * 6
运算符