第1章编译的基本概念

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

| | || | 基 标 运常 基 本 识 算数 本 字符符 符
| | | || 标 运 标 运常 识 算 识 算数 号符符符
24
1.2 编译过程
单词值 if B1 = 13
then X := Y + 1
单词类别 基本字 标识符 运算符(比较)
常数 基本字 标识符 运算符(赋值) 标识符 运算符(加)
中间形式2
O.P
上一遍的结果是下一遍的输入,最后一遍生成目标程序。
40
1.4 编译程序的前端、后端、遍
一遍扫描即可完成整个编译工作的称为一遍扫描编译程序
遍的划分视具体情况而定(内存的大小、源语言的 繁简、目标程序质量的高低)。
优点: 1、减少对内存容量的要求 2、编译程序结构清晰、各遍功能独立、相互联系简单


标识符 = 表达式


Z 表达式 + 表达式

标识符 表达式 * 表达式
----

X 实数
标识符

0.61

8
Y
28
1.2 编译过程
三、语义分析及中间代码生成
任务:规定各语法成分的含义和功能,即规定它们的属性或 在执行时应进行的运算和操作,进行相应的语义检 查;产生中间代码。
• 静态: 分析语法成份的含义,进行语义上的正确性检查。
1.2 编译过程
一、词法分析
任务:对源程序的字符串流进行扫描和分解,识别并输出 一个个单词符号,及其与此相关的属性(保留字, 标识符,常数,运算符,界符)
字符序列
编码形式
➢ 单词:是语言的基本语法单位
<1> 保留字(或称基本字,如:if、else、while)
<2> 标识符(如:max、min、str)
理论基础。
6
第一章 编译的基本概念
7
基本概念
术语:
– 程序和语言 – 翻译程序和翻译方式 – 宿主机与目标机
编译过程概述 编译程序的逻辑结构 编译程序的前端、后端、遍 编译技术的应用与发展
8
1.1 术语
程序:一组指令组成的序列,称为程序
– 源程序:用汇编语言或高级语言编写的程序称为源程序 – 目标程序:用目标语言所表示的程序,可以是介于源语言和
符号表管理
填表:把源程序中的信息和编译过程中所产生的信 息登记在表格中。
查表:在随后的编译过程中同时又要不断的查找这 些表格中的信息。
错误处理
诊察错误,并能报告用户错误性质和位置。 出错处理能力的优劣是衡量编译程序质量好坏的一 个重要指标。
37
1.3 编译程序的逻辑结构
典型的编译程序具有7个逻辑部分
标代码的计算机。
19
1.2 编译过程
编译过程是将高级语言程序翻译为等价的目标程序的过程
翻译外文资料: 1、能识别出句子中的每个单词; 2、分析句子的语法结构; 3、根据句子的含义进行初步翻译; 4、对译文进行修饰; 5、写出最后的译文。
20
1.2 编译过程
文献翻译与编译过程的比较
文献翻译
编译程序
编译程序的分类
1、诊断编译程序 用于帮助程序开发和调试的编译程序。
2、优化编译程序 着重于提高目标代码效率的编译程序。
3、交叉编译程序 如果一个编译程序产生不同于其宿主机的 机器代码。
4、可变目标编译程序 如果不需重写编译程序中与机器无关的部 分就能改变目标机。
18
1.1 术语
宿主机:运行编译程序的计算机。 目标机: 运行编译程序所产生目
• 动态: 根据相应语义,生成中间代码(介于源语言和目标语 言之间的中间语言形式)。
29
1.2 编译过程
➢ 生成中间代码的目的:
1、利于代码优化 2、利于目标代码的移植
➢ 语义分析依循的规则:
为文法的每一个产生式配备计算属性的 计算规则。
➢ 中间代码的形式:
四元式、三元式、逆波兰表示
30
1.2 编译过程
翻译程序
TRANSLATER
目标程序
OBJECT PROGRAM
即源程序是翻译程序的输入,目标程序是翻译程序的输出。
10
1.1 术语
语言:符合一定规则(文法)的程序的集合
– 低级语言 • 字位码、机器语言、汇编语言 • 特点:与特定的机器有关,功效高,但使用复杂、繁 琐、费时、易出错
– 高级语言 • Fortran、Pascal、C、JAVA等 • 特点:不依赖具体机器,移植性好、对用户要求低、易 使用、易维护等。
为什么要学习编译原理
程序设计语言是计算机软件专业的重要核心。通过学 习编译原理可以更好地理解程序语言的内部机制,从而 更好地理解和运用程序设计语言。
编译程序构造的原理和技术一直属于计算机科学必备 的专业基础知识。必修主干课程(操作系统和编译系 统构成程序设计者与计算机之间的基本界面)。
是计算机科学中一个非常成功的分支,也是最早获得 成功的分支之一。
<3> 常数 (如:12、6.8、’a’)
<4> 运算符(如:+、-、*、/)
<5> 界符 (;、(、))
23
1.2 编译过程
单词符号内部的表示: 二元式
单词值
单词类别
词法分析依循的规则: 描述词法规则的有效工具是正规文法和正规式。
例:if B1 = 13 then X := Y + 1 (20个字符)
编译程序
若源程序是用高级语言书写,经加工后得到目标程序,上述 翻译过程称“编译”。
汇编程序与编译程序都是翻译程序,主要区别是加工对象的 不同。由于汇编语言格式简单,常与机器语言之间有一一对 应的关系。汇编程序所要做的翻译工作比编译程序简单的多。
13
1.1 术语 源程序的编译和运行
• 编译或汇编阶段
1
为什么要学习编译原理
它的理论、技术和方法值得深入研究和学习
– 编译构造正确地建立了研究的问题领域和研究方式。 – 针对编译程序构造的某些部分已经开发了标准的形式化技术,包
括有限自动机理论、上下文无关文法、正规表达式、属性文法、 机器代码描述、数据流分析方程式等。 – 编译程序包含许多普遍使用的数据结构和算法,例如哈希算法、 栈机制、堆机制、垃圾收集、集合算法、表驱动算法等。 – 编译程序的许多构造技术已经得到了广泛的应用。 – 学习编译原理有助于我们理解程序设计语言,编写优秀的软件。
分析
1、识别单词 2、分析句子 3、根据语义进行初步翻译
1、词法分析 2、语法分析 3、语义分析、生成中间代码
1、修辞加工
综合 2、写出译文
1、代码优化 2、目标代码生成
21
1.2 编译过程
习惯上是将编译过程划分为5个基本阶段:
词法分析 语法分析 语义分析及中间代码生成 代码优化 目标代码生成
22
教学内容和教学目标
教学内容:
1、基本概念 2、语言分析基础 3、词法分析 4、语法分析 5、语义分析与中间代码生成 6、符号表与错误处理 7、运行时存储空间管理 8、优化及目标代码生成
4
教学内容和教学目标
教学目标:
– 掌握形式语言理论与编译程序的实现原理与技术。 – 从形式语言理论的角度,进一步认识与理解程序设计
五、目标代码生成
任务:把优化后的中间代码变换成目标机的低级语言代码。
运算符
(1)
*
(2)
+
左运算对象 r t1
右运算对象 6.0 x
结果 t1 y
mov r, R1 mul #6.0, R1
mov x, R2
add R1, R2
mov R2, y
34
1.2 编译过程
编译过程小结:
词法分析
S.P 程序
语法分析 程序
语义分析 生成中间 代码
代码优化 程序
目标代码 生成程序
O.P
35
1.3 编译程序的逻辑结构
按逻辑功能不同,可将编译过程划分为五个基本 阶段,与此相对应,我们将实现整个编译过程的编译 程序划分为五个逻辑阶段(即五个逻辑子过程)。
每个阶段中都要有: 符号表管理和错误处理
36
1.3 编译程序的逻辑结构
工作过程:
源程序
输入数据
编译程序 目标程序 目标程序+运行程序
输出数据
16
1.1 术语
编译程序的特点: 1、翻译过程是一种功能上等价的翻译; 2、输出结果是低级语言; 3、编译程序与具体的语言和机器有关; 4、被编译的源程序是被加工的对象, 目标程序是加工的结果; 5、比较复杂,效率高。
17
1.1 术语
11
1.1 术语
翻译程序:将源程序转换为目标程序的 程序称为翻译程序。它是指 各种语言的翻译器,包括汇 编程序和编译程序,是汇编 程序、编译程序以及各种变 换程序的总称。
12
1.1 术语
汇编程序
若源程序用汇编语言书写,经过翻译程序得到用机器语言 表示的程序,这时的翻译程序就称之为汇编程序,这种翻译过程 称为“汇编”。
机器语言之间的“中间语言”,可以是某种机器 的机器语言,也可以是某机器的汇编语言。 – 翻译程序:将源程序转换为目标程序的程序称为翻译程序。 它是指各种语言的翻译器,包括汇编程序和编译 程序,是汇编程序、编译程序以及各种变换程序 的总称。
9
1.1 术语
源程序、翻译程序、目标程序三者关系:
源程序
SOURCE PROGRAM
S.P 词法分析程序

语法分析程序


语义分析及生成中间代码程序
管 理
代码优化程序
错 误 处 理
代码生成程序
O.P
38
1.4 编译程序的前端、后端、遍
编译程序的前端和后端
根据编译程序各部分功能,将编译程序分成前端和后端
前端:通常将与源程序有关的编译部分称为前端——分析部分。 包括:词法分析、语法分析、语义分析、中间代码生成 特点:与源语言有关
语言及其与编译程序的联系。 – 利用学习到的知识,增强编写和调试程序的能力。 – 将编译程序概念和技术应用于一般软件设计之中。
5
先修课程
1.程序设计语言 2.算法与数据结构:栈分配、堆分配、静态分配等各种存储分
配方式。线性表、二叉查找树、哈希表等 多种数据结构。 3.离散数学:集合论与数理逻辑是进一步学习形式语言与自动 机理论的数学基础。 4.软件工程学:掌握大型程序设计及工程化的软件生产方法。 5.形式语言与自动机:相当于本课程中词法分析与语法分析的
后端:与目标机有关的部分称为后端——综合部分。 包括:代码优化、代码生成 特点:与目标机有关
39
1.4 编译程序的前端、后端、遍
对源程序(包括源程序中间形式)从头到尾扫描一次, 并做有关的加工处理,生成新的源程序中间形式或目标程 序,通常称之为一遍。
第一遍
第二遍
S.P
C1
S.P
中间形式1
C2
S.P ……
常数
25
1.2 编译过程
二、语法分析(编译程序的核心)
任务:根据语法规则(即语言的文法),把单词符号串分解成各类 语法成分(如表达式、语句、函数等),分析其源程序的结 构,判别是否为相应程序语言中的合法程序。
语法分析依循的规则: 描述语法规则的有效工具是上下文无关文法。
26
1.2 编译过程
上下文无关文法:
<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“+”<表达式> | <表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” | <标识符> | <整数> | <实数>
例:Z = X + 0.618 *Y 表达式
赋值语句
27
1.2 编译过程
语 法
赋值语句
Z = X + 0.618 *Y
优化包括:局部优化、全局优化、循环优化.
32
1.2 编译过程
例:y=x+r*6
运算符 左运算对象 右运算对象 结果
(1) inttoreal
6
--
t1
(2) *
r
t1Βιβλιοθήκη Baidu
t2
(3) +
x
t2
t3
(4) =
t3
--
y
运算符
(1)
*
(2)
+
左运算对象 r x
右运算对象 6.0 t1
结果 t1
y
33
1.2 编译过程
四元式
例:y=x+r*6
运算符 左运算对象 右运算对象 结果
(1) inttoreal
6
--
t1
(2) *
r
t1
t2
(3) +
x
t2
t3
(4) =
t3
--
y
其中t1、t2、t3为编译程序引入的临时工作单元
31
1.2 编译过程
四、优化
任务:对中间代码进行加工变换,以期在最后阶段产生 出更为高效(省时间、空间)目标程序。
2
课程的性质和特点
性质
– 是计算机专业的重要的专业基础课,被列入国际ACM 91教程 。
本课程主要涉及内容
– 高级程序设计语言 – 形式语言理论的基本概念 – 构造编译程序的基本概念、原理和技术
特点
– 理论性强、内容抽象,理解难度较大。尤其是文法、形式语言
3
及自动机、语法分析及语义分析的概念、原理和技术思想。
源程序
编译程序 或汇编程序
• 运行阶段
输入数据
目标程序 +
运行子程序
目标程序
输出数据
14
1.1 术语
解释程序:对源程序边解释,边执行的程序。类似于口译, 不生成目标代码。
工作过程:
源程序
输入数据
解释程序
输出数据
特点:边解释,边执行; 不生成目标代码; 比较简单,但速度慢。
15
1.1 术语
编译程序:把源程序翻译成等价的目标程序(汇编语言,机器语言)。 类似于笔译。
相关文档
最新文档