第一章 编译原理概述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•翻译程序
将源程序转换为目标程序的程序称为翻译程序。它是 指各种语言的翻译器,包括汇编程序和编译程序,是汇编 程序、编译程序以及各种变换程序的总称。
编译原理
2015年4月25日 12
S
O I
源程序、翻译程序、目标程序 三者关系:
源程序
SOURCE PROGRAM
翻译程序
TRANSLATER
目标程序
源程序
• 工作过程
输入数据
解释程序
输出数据
• 特点:与编译系统比较,解释系统较简单、 可移植性好,易于查错,但速度慢 不产生目标程序,每次执行源程序,都必须解释一次 编译原理
2015年4月25日 20
程序设计语言的转换
翻译:能把某种语言的源程序,在不改变语义 的条件下,转换成另一种语言程序——目标语 言程序。 两种实现方式:
生成中间代码的目的:
• 利于代码优化 • 利于目标代码的移植
中间代码的形式:
• 四元式、三元式、逆波兰表示
编译原理
2015年4月25日
36
四元式
例:y = x + r * 6
运算符
左运算对象 右运算对象 结果
-t1
(1) inttoreal 6
(2) *
(3) + (4) =
r
t2 t3
t1
编译 (笔译,程序到程序)由高级语言转换为低
级语言,如C,Pascal语言
解释 (口译,语句到语句)接受某高级语言的一
个语句输入,进行解释并控制计算机执行,马上得 到这句的执行结果,然后再接受下一句。不产生目 标程序,直观简单,但效率低,如Basic语言
编译原理
2015年4月25日 21
编译和解释
优化举例
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
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日
34
三、语义分析及中间代码生成
任务:依据语义规则对识别出的各种语法成分析其 含义,并进行初步翻译,生成中间代码。
•静态:
分析语法成份的含义,进行语义上的正确性检查 •动态: 根据相应语义,生成中间代码(介于源语言和目 标语言之间的中间语言形式)
编译原理
2015年4月25日 35
编译原理
2015年4月25日
3
课程概述-3:学习任务
• 掌握编译理论基础和形式化系统(过程、思 想,对其思想用数学格式描述)
• 了解编译的全过程及其具体实现方法
编译原理
2015年4月25日
4
课程概述-4:学习方法
• 认真听课,理论书中基本概念、基本原理与 基本算法(枯燥,原理性强,数学性强,符 号多,自己看书比较麻烦) • 弄懂书中例题和认真对待课后习题 • 在看书或理解例题时,一定要划出相应的细 节变化过程,通过画图来加深理解 • 在理解基础上记忆(算法原理概念都是经典 内容)
x
t2
t3 y
其中t1、t2、t3为编译程序引入的临时工作单元
编译原理
2015年4月25日 37
四、代码优化
•任务:对中间代码进行加工变换,以得到高质 量(省时间、省空间)的目标代码
•依据原则:程序的等价变换规则
•主要优化内容 公共子表达式提取、合并已知量、删除 无用赋值语句、循环优化等
编译原理
2015年4月25日 38
33
编译原理
语法分析的方法
推导(derive)、归约(reduce)
–推导:从文法的开始符号开始,按照语法规则, 每次选择某规则右部的一个候选式取代左部,直 至识别了语句或者找到错误为止。其过程可用语 法树描述 –归约:按照语法规则,每次选择某规则左部取代 右部的一个候选式 –注:语法=词法规则+语法规则
• 计算机如何执行高级语言?
– 把高级语言程序翻译成机器语言程序
– 运行所得机器语言程序求得计算结果
编译原理
11
2015年4月25日
•源程序
用汇编语言或高级语言编写的程序称为源程序
•目标程序
用目标语言所表示的程序 目标语言:可以是介于源语言和机器语言之间的“中间 语言”,可以是某种机器的机器语言,也可以是某机器的汇 编语言。
– 字位码、机器语言、汇编语言 –特点:与特定的机器有关,功效高,但使用复杂、繁 琐、费时、易出错
• 高级语言 -- Fortran、Pascal、C 语言等
–特点:不依赖具体机器,移植性好、对用户要求低、 易使用、易维护等。
编译原理
2015年4月25日
10
程序设计语言
• 计算机的核心部件只能读懂自己的指令系统, 不能执行非机器语言编写的程序
《编译原理》
主讲:何 菊 hjojh@sina.com B4418 85811572(O) 教材 《编译原理》 吕映芝等编 清华大学出版社 参教 《编译原理》 陈火旺编 国防科技大出版社
编译原理
2015年4月25日 1
课程概述-1:课程地位
• 计算机专业的专业基础课,主要解决高 级语言的运行问题 • 是软件技术的基础 • 计算机专业学生必修的一门主干课程 • 是本学科研究生入学考试的课程之一
OBJECT PROGRAM
即源程序是翻译程序的输入,目标程序是翻译程序的输出
编译原理
2015年4月25日
13
•汇编程序
若源程序用汇编语言书写,经过翻译程序得到用机器语言 表示的程序,这时的翻译程序就称之为汇编程序,这种翻译过 程称为“汇编”(Assemble)
•编译程序
若源程序是用高级语言书写,经加工后得到目标程序,上述 翻译过程称“编译”(Compile)
编码形式
单词:是语言的基本语法单位
<1>保留字(如:if、else、while)
<2>标识符(如:max、min、str)
<3>常数
(如:12、6.8、’a’)
2015年4月25日 26
<4>算符、界符(如:+、-、*、/、;、(、) )
编译原理
词法分析程序的结果-----二元式
y=x+r*6
单词值
- t1 )
( * id3 60.0 t2 )
id3 t1 t2 ) id2 t2 t3 ) t3 id1 )
赋值语句
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
编译原理
2015年4月2Baidu Nhomakorabea日
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
汇编程序与编译程序都是翻译程序,主要区别是加工对象的 不同。由于汇编语言格式简单,常与机器语言之间有一一对 应的关系。汇编程序所要做的翻译工作比编译程序简单的多。
编译原理
2015年4月25日 14
源程序的编译和运行
• 编译或汇编阶段
源程序 编译程序 或汇编程序 目标程序
• 运行阶段
输入数据
目标程序 + 运行子程序
编 译 程 序
源 程 序
汇 编 语 言
汇 编 程 序
目 标 代 码
初 始 数 据
目运 标行 代子 码程 序 运行时
计 算 结 果
编译时
汇编时
.exe
编译原理
2015年4月25日
.obj
18
高 级 语 言 程 序 的 处 理 过 程
编译原理
2015年4月25日
19
解释程序
以源程序作为输入,不产生目标程序,一边 解释一边执行
编译原理
2015年4月25日 5
课程概述-5:学习要求
• 上课认真听讲,独立完成作业
• 成绩考核:
–平时成绩占30%(出勤、课堂表现、作业) –期末考试占70%(笔试)
编译原理
2015年4月25日
6
《编译原理》知识结构
编译原理
2015年4月25日
7
第 1章
编译概述
教学目标
1. 掌握编译程序中所涉及的有关名词术语
• 编译程序是源程序的一个转换系统 • 解释程序是源程序的一个执行系统 • 两者在实现技术上并无很大差别,都要完 成词法分析、语法分析、语义分析等工作。
编译原理
2015年4月25日
22
1.2 编译过程和编译程序的结构
• 翻译和编译工作的比较
翻译外文 分析 编译程序 识别单词 词法分析 分析句子 语法分析 根据语义进 语义分析、生成中间代码 行初步翻译
编译原理
2015年4月25日 29
二、语法分析(编译的核心)
任务:根据语法规则(即语言的文法),分析并识 别出各种语法成分(如表达式、语句、函数等), 并进行语法正确性检查。 语法规则:规定单 通过语法分解,确定整个 词如何构成短语、 输入串是否构成语法上正 语句、过程、程序 确的句子、程序等 语法规则的表示: A: : = B | C
编译原理
2015年4月25日
2
课程概述-2:编译的作用
• 本课程介绍如何将高级程序设计语言变换成计算机 硬件所能识别的机器语言。
• 编译原理介绍编译程序的原理,如何编程使高到低。
• 其理论基础坚实,其形式化系统不仅应用于编译技 术,还大量应用于人工智能、多媒体技术及数据库 等领域。
–例如:翻译风,一个翻译的过程
输出数据
编译原理
2015年4月25日
15
编译程序
编译程序是现代计算机系统的基本组成部分
从功能上看,一个编译程序就是一个语言翻译程序
它是把一种语言(称作源语言)书写的程序翻译成另 一种语言(称作目标语言)的等价的程序
编译原理
2015年4月25日
16
编译的过程转换
两阶段转换:编译—运行(compile-run)
2.理解编译程序总的框架,明确编译程序工 作的基本过程及各阶段的基本任务
编译原理
2015年4月25日
8
程序设计语言
• 自然语言——人与人交流的一种工具 • 人与计算机如何交流
?
通过程序设计语言将问题编写成程序 ,计算机按程序的计算步骤计算出结 果
编译原理
2015年4月25日 9
程序设计语言
• 低级语言(Low level Language)
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日 23
编译过程
• 编译程序工作时,先分析,后综合
– 分析:指词法分析和语法分析; – 综合:指代码优化,存储分配和代码生成。
• 为完成上述分析综合任务,编译程序采用对 源程序进行一次或多次扫描的办法。
– 如:第一遍扫描做词法分析;第二遍扫描做语法 分析;第三遍扫描做代码优化和存储分配;第四 遍扫描做代码生成。
编译原理
2015年4月25日 24
编译过程
• 从输入源程序开始到输出目标程序为止的 整个过程可分为六个阶段: 词法分析 对源程序结构的分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成
编译原理
2015年4月25日 25
一、词法分析
任务:根据词法规则分析和识别单词 字符序列
编 译 程 序 编译时
术语
源 程 序
(*.C / *.PAS)
目 标 代 码
(*.OBJ / *.EXE)
初 始 数 据
目运 标行 代子 码程 序 运行时
计 算 结 果
编译程序的源语言(源程序)
编译原理 编译程序的目标语言 (目标程序)
2015年4月25日 17
编译的过程转换
三阶段转换:编译—汇编—运行