编译原理 清华大学出版社

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

出版时间 2000.10 2000.1 1999.9
《编译原理及实践》
2
第一章 编译程序概论
主要介绍编译程序的基本概念、基本结构。 § 1.1 什么是编译程序 § 1.2 编译过程及编译程序结构
➢ 1.2.1 编译过程 ➢ 1.2.2 编译程序的基本结构
§ 1.3 编译技术和软件工具 § 1.4 程序设计语言范型
▪并行编译技术--需进一步研究的问题
处理并行语言的并行编译技术、串行程序转换成并行程序的自动并行编译 技术等。
10
§1.2 编译过程和编译程序的结构
编译过程是一种语言的翻译过程,它的工作过程类似于外 文的翻译过程。 【例】英文句子翻译成中文句子的大致过程是:
1. 词法分析:根据英语的词法规则,从由字母、空格字符和各 种标点符号所组成的字符串中识别出一个一个的英文单词。
3
§1.1 什么是编译程序
编译程序是现代计算机系统的基本组成部分之一,而且多数 计算机系统尤其是嵌入式系统和高性能体系结构都含有不止一 个高级语言的编译程序,对有些高级语言甚至配置了几个不同 性能的编译程序。
从功能上看,一个编译程序就是一个语言翻译程序。
❖ 翻译程序(translator) ❖ 编译程序(compiler) ❖ 源程序的加工过程 ❖ 与编译程序相关的程序
4
翻译程序(translator)
翻译程序是指这样一个程序,它把一种语言(源语言)所 写的程序(源程序)翻译成与之等价的另一种语言(目标 语言)的程序(目标程序)。
源程序
翻译程序
目标程序
源语言:source language 源程序:source program 目标语言:object or target language 目标程序:object or target program
22
目标代码生成
赋值语句
sum := first + count * 10
中间代码--四元式
( * id3 ( + id2
10.0 t1 ) t1 id1 )
目标代码
MOV id3, R2 MUL #10.0, R2 MOV id2, R1 ADD R1, R2 MOV R1, id1
23
§1.2.2 编译程序的结构
▪ 语言的结构化编辑器 结构化编辑器是引导用户在语言的语法制导下编制程 序,能够自动地提供关键字和与其匹配地关键字.例如, Editplus、Ultraedit、Jbuilder等
▪ 语言程序的调试工具 对算法的错误或程序未能反应算法的功能等错误进行 调试.
30
§1.3.2 编译技术和软件工具(2)
整数:10 界符:。
逗号:, 冒号::
分号:; 赋值号::= 加号:+ 乘号:*
机内码为:id1:=id2+id3*10
13
2、语法分析
❖ 任务:单词符号串 → 各类语法单位 在词法分析的基础上将单词序列分解成各类语法短语.通常 用语法树表示这种语法短语.
❖ 依据:语言的语法规则 ❖ 描述语法规则的工具:上下文无关文法、确定的下推自动机
1. 编译程序总框
源程序
词法分析器
单词符号

语法分析器


错 语法单位


理 程
语义分析及中间代码生成器

中间代码


优化器

中间代码
目标代码生成器
目标代码
24
2. 表格与表格管理
用途:登记源程序的各类信息和编译程序各阶段的进 展情况,如符号表。 管理:构造、查找、或更新。
3. 出错处理
任务:发现并指出源程序中错误的性质和位置; 自动校正错误。
连 其接它程文序件还以连及接执目行标宏程替序代和。用于
标准库函数的代码,以及连接目
标程序和计算机的操作系统提供
的资源(存储分配程序及IO设备28)
29
§1.3.2 编译技术和软件工具(1)
开发高质量与高效率的软件遵循的要求:
1)软件工程中要求的规范化标准 2)先进的软件开发技术及其软件工具
软件工具开发用到的编译技术与方法:
编译过程一般分为以下六个阶段 (与自然语言翻译过程对比):
✓ 词法分析 ✓ 语法分析 ✓ 语义分析 ✓ 中间代码生成 ✓ 代码优化 ✓ 目标代码生成
12
1、词法分析(扫描器)
❖ 任务:源程序 → 单词符号串 从左至右一个字符一个字符地读入源程序,对构成源程序的 字符流进行扫描和分解,从而识别出一个个单词符号.
2. 语法分析:根据英语的语法规则,对词法分析后的单词串进 行分析、识别,并做语法正确性检查,看其是否组成一个符 合英语语法的句子。
3. 语义分析:对正确的英文句子分析其含义并用汉语表示出来.
4. 根据上下文的关系以及汉语语法的有关规则对词句作必要的 修饰工作。
5. 最后翻译成中文。
11
§1.2.1 编译过程概述
例如:符号串
id1:=id2+id3*10
经过语法分析知它代表一个赋值语句.
14
对应的语法树如下:
语句id1:=id2+id3*10的语法树
15
程序结构(1)
程序结构通常采用递归规则表示,也就是用来描述程序结构 的规则。
例如:定义表达式的规则、定义语句的规则
定义表达式的规则:
1. 任何标识符是表达式。
▪ 语言程序的测试工具:静态分析器与动态测试器 ➢ 静态分析器 在不运行程序的情况下对源程序进行静态地分析,以 发现程序中潜在的错误或异常。对源程序进行语法 分析并制定相应表格,检查变量定值与引用的关系。 例如:某变量未被赋值就被引用;变量定值后未被引 用;多余的源代码等.
31
§1.3.2 编译技术和软件工具(3)
如果源语言是汇编语言,目标语言是机器语言,那么称这 样的翻译程序为汇编程序。
源程序
汇编语言 所写程序
汇编程序
目标程序 机器语言程序
7
源程序的加工过程
采用编译方式在计算机上执行高级语言编写的程序,一般 分两大阶段,编译阶段和运行阶段。
初始数据


源程序

机器语言目标程序
结果

运行系统
8
如果编译阶段生成的目标程序不是机器程序,而是汇编程 序,则程序的执行需分三个阶段,编译阶段、汇编阶段和 运行阶段。
语句id1:=id2+id3*10的语义分析(类型审查)过程:
增加的语义处理节点, 表示整型转换成实型
的一目算符
19
4、中间代码产生
❖ 任务:语法单位 → 初步翻译、产生中间代码
❖ 中间代码:是一种结构简单含义明确的记号系统.例如,四 元式、三元式、逆波兰式等.
❖ 依据:语言的语义规则
❖ 设计原则:1)容易生成2)容易翻译成目标代码 在PASCAL语言中,符号串:
❖ 依据:语言的词法规则 ❖ 描述词法规则的工具:正则式、正则文法、有限自动机
对于PASCAL程序段 begin
var sum,first,count:real;
sum:=first+count*10
end. 通过词法分析,可识别出如下的单词符号序列:
基本字: begin,var,real,end 标识符:sum,first,count
任课教师:湛 燕 Email: zhanyan@mail.hbu.cn
数学与计算机学院
1
教材与参考书
编译原理(第二版). 张素琴,吕映芝,蒋维杜,戴桂兰编 著,清华大学出版社,2005.2.
名称 编译原理 编译原理 编译原理
作者 何炎祥 陈火旺等 蒋立源
出版社 华中理工大学 国防工业出版社 西北工业大学
25
§1.2.3 编译阶段的组合
遍(pass):
对源程序或源程序的中间结果从头至尾扫描一次,并作 有关的加工处理,生成新的中间结果或目标程序的处理 过程称为一遍。 可以把一个阶段分为若干遍,也可以把多个阶段合为一 遍,通常有一遍和多遍编译程序。
26
编译的前端与后端:
前端(front end) : 由与源语言有关但与目标机无关的部分组成。
id1:=id2+id3*10
可产生一种四元式形式的中间代码:
序号
算符 左操作数 右操作数
结果
(1) inttoreal 10
-
t1
(2)
*
id3
t1
t2
(3)
+
id2
t2
t3
(4)
:=
t3
-
id1
20
5、代码优化
❖ 任务:中间代码 → 高效的中间代码
对中间代码进行变换或进行改造,以便生成高效的中间代码 (省时间和空间).
▪ 语言程序的测试工具:静态分析器与动态测试器 ➢ 动态测试器 --在源程序的适当位置插入某些信息, 并用测试用例记录(显示语句或函数)程序运行时 的实际路径.将运行结果与期望结果进行比较分析, 帮助编程人员查找问题.
初始数据
源程序
编 译 程 序
汇编语言 目标程序
汇 编 程 序
机器语言 目标程序
结果
运行系统
9
编译程序的发展历史
▪第一个编译程序-Fortran编译程序(20世纪50年代) ▪编译程序自动生成工具(20世纪50年代末)
以任一语言的词法规则、语法规则和语义解释出发,自动产生该语言的编 译程序。
LEX-是一个词法分析器的自动产生系统 YACC-是一个语法分析程序的自动产生器
❖ 依据:等价变换规则
❖ 变换方法:公共子表达式的提取、循环优化、删除无用代码等
优化后的中间代码:
序号 (1) (2)
算符 * +
左操作数 id3 id2
右操作数 10.0 t1
结果 t1 id1
21
6、目标代码生成
❖ 任务: 中间代码→依赖于机器的目标代码(汇编语言或机器语言)
❖ 涉及的主要问题: ▪ 指令的选择 ▪ 内存的分配 ▪ 寄存器的分配 ▪ 目标代码的形式: ➢ 绝对指令代码 ➢ 汇编指令代码 ➢ 可重定位的指令代码
后端(back end) :
包括与目标机有关的部分。而一般不依赖于源语言,只 与中间代码有关的编译阶段。
词法分析→语法分析→语义分析与中间代码生成→优化→目标代码生成
前端
(中间代码)
后端
27
§1.3.1 编译技术和软件工具
----与编译程序相关的程序
❖ 解释程序(interpreter)
❖ 汇编程序(assembler)
❖ 编辑器(editor) ❖ 调试程序(debugger)
个译 在 未 代 预 之 预 运 直 存交这 被 码 前 处 接 着成 处 行互种 连 的 由 理 执 大目 理 一的情 接 机 编 程 行 多标 程 个开况 的 器 译 序 不 数代 序 带发下 机 代 器 可 同 的码 是 有环,器码调以,源。在调境真试目代之用删因代-标码间的除为码正程-代)有独调信的序注I码与了立试息编的释DE(可区程。译程、中即执别序开序包。还行。。保始与含
一个语言的解释程序是这样的程
❖ 连接程序(linker)
序 汇编:程序是用于特定计算机上的
编它 汇译以编器该语通语言常言的接写翻受的译由源程任程序何序。生作成为标输准入,
—❖—预—处——理—程—序—(—p—re—p—ro—ce—s—so—r)—文 写 一但 边 有 语 连 件 个 调 中—的 个件时 言 接 中 可 试 判不执源 编(编 , 程 编 直 程 定产行程 辑例译 然 序 译 接 序 执生源序 器如器 后 将 或 执 是 行目程。 和A把 再 分 汇 行 可 错标序S最其汇由别编的在误程本CI近它编汇在的文被的序身I),程语编不代件编程。,的编序言程同码中译序而编译捆作序的收。了。是辑器绑为将目集的边器已进目它标到程解编与一标翻文一序释
17
3、语义分析(1)
wenku.baidu.com语义
定义语言的单词符号和语法单位的意义.一个语言的 语义是指这样的一组规则,使用它可以定义一个程序的 意义.这些规则称为语义规则.
离开语义,语言只不过是一堆符号的集合.
语义分析阶段的主要任务
审查源程序有无语义错误,为代码生成阶段收集类型信 息.
18
3、语义分析(2)
例如: 类型审查、数组下标检查、强制类型转换等
▪应用自展技术构造编译程序(20世纪60年代)
自展技术就是用被编译的语言来书写该语言自身的编译程序。首先对语 言的核心部分构造一个小小的编译程序,再以它为工具构造一个能够编译更 多语言成分的较大的编译程序。如此继续下去,最后形成所期望的整个编译 程序。这种通过一系列自展途径而形成编译程序的过程,叫做自编译过程。
5
编译程序(编译器compiler)
如果源语言是高级语言,目标语言是低级语言,那么称这 样的翻译程序为编译程序。
高级语言:C、PASCAL、C++、FORTRAN、JAVA 低级语言:汇编语言、机器语言
源程序
高级语言 所写程序
编译程序
目标程序
汇编语言或 机器语言程序
6
汇编程序(Assembler)
2. 任何常数(整常数、实常数)是表达式。
3. 若表达式1和表达式2都是表达式,那么 ·表达式1+表达式2 ·表达式1*表达式2 ·(表达式1)
都是表达式。
16
程序结构(2)
语句的表示: 1. 标识符:=表达式 是语句。 2. while (表达式) do 语句 和
if (表达式) then 语句 else 语句 都是语句。
相关文档
最新文档