编译原理课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译阶段
汇编阶段
运行阶段
2011/2/27
23
2011/2/27
24
4
三、编译程序的基本结构
由五个部分组成:
五个部分的工作分别由对应的五个程序来完 成:
源程序 词法分析 语法分析
表格管理
出错处理
词法分析程序,语法分析程序,语义分析及中 间代码生成程序,代码优化程序,目标代码生 成程序。另外再加表格管理程序和出错处理程 序――构成编译程序的主要组成部分。
编译构造正确地建立了研究的问题领域和研究
编译系统是一种软件,一种系 统软件。
软件:计算机系统中的程序及其
应用软件层 语言处理系统 操作系统 裸机
文档。
系统软件:居于计算机系统中最
靠近硬件的一层,其他软件一般 都通过系统软件发挥作用。和具 体的应用领域无关,如编译系统 和操作系统等。 语言处理系统:把软件语言书写 的各种程序处理成可在计算机上 执行的程序,如编译系统。
编译程序设计原理 杜淑敏等 北京大学出版社 参 考 书 籍
使用教材
编译原理与技术 李劲华等 北京邮电大学出版社
4
编译程序在计算机系统中的作用
为什么学习编译(1)
编译程序构造的原理和技术一直属于计算 机科学必备的专业基础知识。 是计算机科学中一个非常成功的分支,也 是最早获得成功的分支之一。 它所建立的理论、技术和方法值得深入研 究和学习。
12
2011/2/27
2011/2/27
2
程序的构成:基本字符集,单词,句子。 基本字符集:ASCII表中的字符。
单词:由字符集中的字符组成的最小的语法单位。
(2) 语法规则和语义规则
a) 什么是语法规则? 语法规则
(词法分析的对象) 标识符 保留字(关键字,基本字) 常数 3.14159 运算符 * + 界符 ( ):,;=等。
2011/2/27
BNF范式:便于存储 语法图:直观
14
2011/2/27
ⅰ>. BNF范式
构成:用终结符,非终结符,::=和︱等构成的式子来描述 文法。 例:“标识符”语法成分用BNF范式表示:字母开头的字母 数字串: <标识符>::=<字母>|<标识符><字母>|<标识符><数字> <字母>::=A|B|C|…|Y|Z|a|b|…|z <数字>::=0|1|2|3|4|5|6|7|8|9 根据标识符定义,可以推出字符串a4是一个标识符: <标识符>=><标识符><数字> =><标识符>4 =><字母>4 =>a4 扩充的BNF范式表示文法的方法将在后面介绍。
词法规则:单词符号的形成规则。 语法规则:规定了从单词符号形成更大的结构(即语 法单位又称句子)
句子:按Baidu Nhomakorabea法规则由单词组成。――语法分析的 对象,语义检查的对象。
表达式,语句,分程序,函数,过程,程序等。
13
词法和语法规则定义了程序的形式结构,它是判 断输入字符串是否构成一个形式上正确的程序的 依据。 b)语法规则(又称文法)的表示 文法的表示
1. 2. 3. 4.
(5)目标代码的生成 任务:将中间代码变换成特定机器上的绝对 指令代码或可重定位代码或汇编指令代码。 工作:与硬件系统结构和指令含义有关。这 一工作比较复杂。
(*, 6.28, r, T2) (+, h, 5, T3) (*, T2,T3, T4) (=,T4, -,s)
高级语言程序处理: 高级语言程序 → 编译程序 → 低级语言程序 (源程序) (目标程序)
11
语法:由基本符号组成语法成分一组规则 语义:按语法规则构成的语法成分的意义-> 静态语义,动态语义。 语用:使用者与语言符号的关系,涉及符号来 源,使用和影响。 高级语言程序:都可看成一给定字符集(称为 字母表)上的一个字符串。合乎语法的字符串 才算一个合适的程序。(字符流)
高级语言源 程序
编译程序
机器语言目标 程序
结果
运行系统
编译阶段
运行阶段
2011/2/27
21
2011/2/27
22
处理方式ii) :
初始数据
b) 解释程序法
结果
高级语言 源程序
编 译 程 序
汇编语言 目标程序
汇 编 程 序
机器语言 目标程序
运行系统
解释程序:一边解释,一边执行源程序的翻 译程序。 注:解释程序不生成目标程序,而编译程序 生成目标程序。(两者的区别)
2011/2/27
方式。
5 2011/2/27 6
1
为什么学习编译(2)
针对编译程序构造的某些部分已经开发了标
本课程主要内容
7 2011/2/27
准的形式化技术,包括有限自动机理论、上 下文无关文法、正规表达式、属性文法、机 器代码描述、数据流分析方程式等。 编译程序包含许多普遍使用的数据结构和算 法,例如散列法(哈希算法)、栈机制、堆 机制、垃圾收集、集合算法、表驱动算法。 编译程序的许多构造技术已经得到了广泛的 应用。 学习编译原理和技术还有助于我们理解程序 设计语言,编写优秀的软件。
数字
0 1 2 … 7 8 9
例:赋值语句,x=x+1;求表达式x+1的值,且 将该值赋给x表示的存储单元。 又如:int x;说明分配x表示的单元,该单元的 存储空间为一个整数最大值的位数。
语义在文法中用属性文法定义。
2011/2/27
17
2011/2/27
18
3
2.程序、文法及编译程序 关系:
语义分析和中 间代码生成
代码优化
注: ① 编译程序各部分之间的逻辑关系,不一定是 执行时间上的顺序关系。可用扫描遍数及各 遍扫描的工作描述各部分之间的组合。
2011/2/27 26
目标代码生成
2011/2/27 25
一个编译过程可由一遍、两遍或多遍完成。 所谓“遍”是对源程序或某等价的中间语言程序从头到 尾扫描并完成规定任务的过程。一遍扫描可以完成 一个部分或多个部分的工作。 如:一遍扫描完成词法分析;一遍完成词法分 析和语法分析,甚至一遍扫描完成整个编译工作。 遍数的多少主要参考源程序和机器的特征,以及设计 目标;
2011/2/27
概述(2h) 文法和语言的基本知识(4h) 词法分析与有穷自动机(6h) 语法分析(8h) 语法制导翻译技术和中间代码生成 (4h) 符号表的组织与管理(1h) 代码优化(3h) 运行时存储组织与管理(2h) 目标代码生成 (1h) 并行编译技术基本常识(1h) 总结复习(2h)
8
攻城不怕坚, 攻书莫畏难。 科学有险阻, 苦战能过关。
——叶剑英《攻关》1962年
2011/2/27 9
第1章
编译概述
编译程序 编译过程 编译程序的结构 编译程序的生成方法
2011/2/27
10
一、高级语言源程序
本课程解决的主要问题: 如何将源程序翻译成功能等价 的目标程序?
1.高级语言程序 (1) 程序语言:是一个记号系统,由语法和语 义来定义。 语言三大要素:语法,语义和语用:
课程要求
编译原理
胡伦骏等编著
(2011年 2011年2月-4月)
讲课进展较快,平时不复习并加深理解,后面将
面临困难
作业要求独立完成 上机实验,不要轻视 学期总评
: 考 试 成 绩 占 80% , 平 时 成 绩 占 20% (考勤、练习、作业、上机实验等)
主讲:朱世松 计算机学院
2011/2/27
其中:T1, T2, T3,T4是编译程序引进的临 时变量,存放每条指令的运算结果。 四元式表示的语义为:
1. 2 * 3.14 =>T1 2. T1 * r => T2 3. h + r =>T3 4. T2 * T3 =>T4 5. T4 =>s
2011/2/27 34
2011/2/27
33
(4) 代码优化 任务:对中间代码进行等价变换或改造, 以获得省时、省空间的目标代码。 例:对上面的中间代码优化:
1. 2.
29 2011/2/27 30
任务:对构成源程序的字符流,从左到右进行扫 描和分解,按词法规则识别出一个一个具有独立 意义的单词(也称单词符号,简称符号) 单词类型:
保留字(基本字,关键字):for, if 等。 标识符:a b 等 常数:3.14159 等 运算符:* + / 等 界符:( ) ;,等
多遍扫描较一遍扫描编译程序占存储空间少,编译 程序逻辑结构清晰,但开销大,降低编译效率。
同一个源语言的编译程序移植到不同机器上。方法:某 一编译程序的前端+相应不同的后端。 在同一机器上生成几个语言的编译程序。方法:不同语 言编译的前端生成同一种中间语言,再使用一个共同的 后端。
28
2011/2/27
2011/2/27
5
(2)语法分析
(3) 语义分析及中间代码的生成
任务:在词法分析的基础上,根据语言的语 法规则从单词符号串中识别出各种语法单位 (如表达式,说明,语句等),并进行语法 检查。即检查语法结构的正确性。 例:语法分析程序从下列单词符号串: s = 2 * 3.14 * r * (h+r) 识别出这是一个<赋值语句>语法成分,而 右边为<表达式>语法成分。
源程序 编译程序 目标程序
二、翻译程序与编译程序
1.翻译程序
源程序 翻译程序 目标程序
语 言 文 法
翻译程序的基本方法:
编译程序法(编译方式) 解释程序法(解释方式)
2011/2/27
19
2011/2/27
20
处理方式i) : a)编译程序法
编译程序:将高级语言源程序翻译成
初始数据
等价的机器语言或汇编语言的目标程 序。
2011/2/27 3
Compiler Construction Principle and Pratice 编译原理及实践 Kenneth C.Louden 机械工业出版社 编译方法 马良行、曹启君 机械工业出版社 程序设计语言编译程序 陈火旺等 国防工业出版社
2011/2/27
参 考 书 籍
编译原理 吕映芝 清华大学出版社
先修课程: 《C语言程序设计》、《离散数学》、
《数据结构》等
2
学习的目的
了解编译程序的实现原理和技术。 利用从本课程学习到的知识,增强编写和调试程序的
能力。
学习的意义
对编程语言的设计和实现有深刻的理解,对和编程语
言有关的理论有所了解,对宏观上把握编程语言来 说,起一个奠基的作用。 从软件工程看,编译器是一个很好的实例,所介绍的 概念和技术能应用到一般的软件设计之中。 大多数程序员同时是简单语言的设计者,有助于提高 对这些语言的设计水平。 在软件逆向工程、程序理解和软件安全等方面有着广 泛的应用。
31
任务:首先对每个语法单位进行静态的 语义审查,然后分析其含义,并用中间 代码描述这种语义(如:四元式)。
2011/2/27
2011/2/27
32
四元式的形式: (运算符,运算对象1,运算对象2,结果) 例:赋值语句:s = 2 * 3.14 * r * (h+r) 语义:先计算右边表达式的值,再将该值送到s表 示的内存单元中,翻译后的四元表达式表示: 1. ( * , 2 , 3.14, T1) 2. ( * , T1 , r , T2) 3. ( + , h , r , T3) 4. ( * , T2 , T3 , T4) 5. ( = , T4 , - , S )
15
ⅱ>. 语 法 图
由箭头,方框和圆框组成的有向图来描述文 法。
方框中的符号为非终结符;圆框中的符号为终结 符;箭头指示了语法单位之间的构成关系。
例:“标识符”的语法图
标识符 字母
字母 数字
2011/2/27 16
2011/2/27
字母 A B C Z a … z
…
c) 语义规则 定义单词符号及语法单位的含义。(包括语 句的动作含义,单词的存储分配的含义等)
27
2011/2/27
四、编译过程概述
(1)词法分析
例:if a1>0 then b=b+3; 分解识别出的单词序列:
保留字 if 标识符 a1 3. 运算符 > 4. 常数 0 5. 保留字 then 6. 标识符 b 7. 运算符 = 8. 标识符 b 9. 运算符 + 10. 常数 3 11. 界符 ;
②
前端与后端工作的组合 前端工作:主要依赖源语言而与目标机器无关的 工作,包括:词法,语法及语义及中间代码生 成,某些优化工作(相关出错处理和符号表管理 工作)。 后端工作:依赖于目标机器而与源语言无关的工 作,包括:目标代码生成工作(相应的出错处理 及符号表管理工作)。 实现: