第一章 编译程序概论PPT课件
第1章编译程序概论

第1页,共35页。
第一章 编译程序概论
第2页,共35页。
本章学习目标
❖ 编译程序是高级语言的支撑基础,是计算机 系统中重要的系统软件之一,本章主要内容:
❖ 编译程序的功能 ❖ 编译程序的体系结构 ❖ 编译程序的工作过程 ❖ 编译程序的设计
第3页,共35页。
1.1 程序设计语言
第13页,共35页。
❖ 例如,用C 语言编写的程序段如下:
❖ main( )
❖{
❖ float x=2,y=3,s;
❖
s=x+y*5;
❖}
❖ 识别出的单词序列为表1-1所示
第14页,共35页。
表1-1词法分析程序
类型名 保留字 右括号 保留字 等号 逗号 等号 逗号 分号 等号 运算符 运算符 分号
第31页,共35页。
❖ 编译程序一般包括词法分析程序、语法分析程序、语义分析程序、中 间代码生成程序、代码优化程序、目标代码生成程序和出错处理程序 等。
❖ 编译过程可以分遍编译。编译程序的构造有多种技术。主要有自编译、 移植、交叉编译、自展和自动化技术。
❖ LEX是一个具有代表性的词法分析程序生成器。YACC是一个基 于LALR(1)分析法的语法分析程序生成器。
第25页,共35页。
❖ 3.编译程序的自展技术 ❖ L=Ln…L1L0图1-4编译系统的自展过程 ❖ 自展的方法是:首先确定一个非常简单的核
心语言L0,然后用机器语言或汇编语言书写 它的编译程序T0;再把语言L0扩充到L1,此时 有然L后0属再于把L语1,言并L1用扩L充0编为写L2出,L此1的时编,译L1程属序于TL12,, 并用L1编写L2的编译程序T2,……这样不断的 扩展下去,直到完成所要求的编译程序为止。 自展技术的使用如图1-4所示。
编译原理第一章PPT课件

掌握编译原理有助于提高程序员对程序性能、代码质量和软件
03
工程实践的理解。
编译原理的应用领域
编译器设计
编译原理的核心应用领域之一 是编译器设计,包括源代码到
目标代码的转换、优化等。
解释器设计
解释器是另一种将源代码转换 为机器码的程序,编译原理同 样适用于解释器的设计。
程序分析
编译原理中的一些技术可以用 于程序分析,例如静态分析、 动态分析和程序切片等。
从高级语言的设计开始,逐步向下设计低级语言和机器语言。
数据结构和算法选择
选择合适的数据结构和算法,提高编译器的性能和可维护性。
代码优化
在生成目标代码之前,对中间代码进行优化,以提高目标代码的性能 和质量。
04 语言与语法
语言的定义与分类
总结词
语言的定义与分类是编译原理的重要基础,它涉及到语言的语法、语义和语用等方面。
语言的语义分析
总结词
语义分析是编译过程中的重要环节,它涉及 到对语言意义的解释和理解。
详细描述
语义分析是对源代码进行静态分析的过程, 目的是理解源代码的意义和功能。在语义分 析阶段,编译器会检查源代码中是否有语法 错误、类型错误、逻辑错误等,并对其进行 相应的处理。同时,语义分析还会进行符号 表管理、类型检查、控制流分析等工作,以
详细描述
中间代码生成是编译过程的第三步,其主要任务是将抽象语法树转化为中间代码。中间代码是一种抽象的、与具 体机器无关的代码形式,通常采用三地址码、四元式等表示方式。中间代码的主要目的是为了方便后续的优化和 目标代码生成。
代码优化
总结词
对中间代码进行优化,提高执行效率。
详细描述
代码优化是编译过程中非常重要的一步,其主要任务是对中间代码进行优化,以提高生成的目标代码 的执行效率。常见的优化技术包括常量折叠、无用代码删除、循环展开等。
编译程序概述.ppt

→判断单词与图中匹配吗? →匹配→单元翻
译程序→下一个分析→程序结束符‘·’
2019-10-24
谢谢你的观看
21
5、PL/0语法调用关系图(见图2.7)
6、Block过程的流程图(见图2.8)
Block过程是处理说明部分和程序体部分
一起看Block的源代码
五、PL/0目标代码生成
1、PCODE代码
〈条件〉∷=〈表达式〉〈关系运算符〉〈表达式〉
|ODD〈表达式〉
2019-10-24
谢谢你的观看
9
PL/0语言文法的EBNF表示
〈表达式〉∷= [+|-]〈项〉{〈加法运算符〉〈项〉} 〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉} 〈 因 子 〉 ∷= 〈 标 识 符 〉 | 〈 无 符 号 整 数 〉 |‘ ( ’ 〈表达式〉‘)’ 〈加法运算符〉∷=+|〈乘法运算符〉∷=*|/ 〈关系运算符〉∷ =#|〈|〈=|〉|〉=|=
谢谢你的观看
5
PL/0语言语法图描述
分程序 const ident = number
,
;
var
ident
,
;
2019-10-24
;
procedure
ident
; 分程序
语句
P14 (c,d,e,f,g)
谢谢你的观看
6
PL/0语言文法的EBNF表示
EBNF 引入的符号(元符号): < > 用左右尖括号括起来的语法成分为非终结符 ∷= (→) ‘定义为’ ∷=(→) 的左部由右部定义
〈过程说明部分〉∷=〈过程首部〉〈分程序〉{; 〈过程说明部分〉};
〈过程首部〉∷=PROCEDURE〈标识符〉;
编译原理 第1章课件

第一章编译程序概述目录1.1 什么是编译程序1.2 编译过程概述1.3 编译程序的结构1.4 编译阶段的组合1.5 编译技术和软件工具1.1 什么是编译程序编译程序:是一个语言翻译程序,是将用高级语言书写的源程序翻译成等价的低级语言的翻译程序。
(C ,Pascal,Foxbase 等) (机器语言,汇编语言) 翻译程序:是把一种语言书写的程序(源程序)翻译成另一种语言(目标语言)的等价的程序。
编译程序的重要性:使得计算机用户不必考虑与机器有关的繁琐细节,使程序员和程序设计专家独立于机器。
编译程序的发展■第一个编译程序的出现:20世纪50年代早期,主要将算术公式翻译成机器代码■20世纪50年代中期,一批编译系统程序开发成功■20世纪50年代末,开始研究编译程序的自动生成工具(LEX 、Y ACC )■20世纪60年代,研究使用自展技术,1971年PASCAL 自展技术成功后,影响越来越大。
1.2 编译过程概述一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序从一种表示形式转换成另一种表示形式。
典型的划分方法:(下图)词法分析阶段:编译过程的第一个阶段从而识别出一个个单词。
(逻辑上紧密相连的一组字符,这些字符具有集体含义。
)单词:标识符,保留字,常数、算符,界符等语法分析:编译过程的第二个阶段依据语言的语法规则从单词符号串中识别出各种语法单位(如“程”,“语句”,“表达式”等)。
目的:检查各种语法单位在语法结构上的正确性。
例子中:符合赋值语句的语法规则,即:<变量>=<表达式>例:s=2*3.1416*r*(h+r)规则<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=“(”<表达式>“)”<表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数> ■词法分析和语法分析本质上都是对源程序的结构进行分析。
编译程序基本概念.精选PPT

※ 什么是 解释程序?
解释程序(interpreter)也是一种翻译程序,将某高 级语翻译成具体计算机上的低级程序设计语言;解释程序 的执行过成如图1.3 所示。
数据
一条源语句
解释程序
结果
图 1.3 解释程序的执行过程
编译程序与解释程序的主要区别: ⑴ 前者有目标程序而后者无目标程序; ⑵ 前者运行效率高而后者便于人机对话。
:=
<表达式>
1】什么是编译程序?什么是解释程序?二者的区别?
b ※ Байду номын сангаас算机中语言的层次体系:
1 什么是编译程序?
<项> + <项>
Ⅰ
⑴ ( + a 10 t2 )
符号表管理
<因式> <因式> * <因式> Ⅱ 【机器翻译】是指利用计算机把一种自然语言翻译成另一种自然语言。
4 编译程序总体结构框图
⑵ ( := t2 _ b )
( 生成的结果是一棵 语法树 )
编译程序与解释程序的主要区别:
<赋值语句> 通常,是把中间语言转换成目标代码,
当语法分析需要下一个单词时,就调用词法分析器, 例: b := a+2*5 ※ 编译程序与机器翻译的类比 :
算术表达式的 层次结构
<变量> 2 中的各阶段划分成若干遍;
⑴ 关键字 (k) -- var,integer ; 语法分析: 组词成句及语法错误检查
1 什么是编译程序?
b:=a+2*5;
单词类码
⑴ 关键字 (k) -- var,integer ;
⑵ 标识符 (i) -- a,b ;
什么叫编译程序.ppt

1.1 什么叫编译程序 编译程序:是指这样的程序,它能够把某种
语言的程序转换成另一种语言的程序, 而后者与前者在逻辑上是等价的。如果 源语言是诸如FORTRAN、Pascal、C、Ada、 Smalltalk或Java这样的“高级语言”, 而目标语言如汇编语言之类的“低级语 言”这样的翻译程序则称之为编译程序。
第一章 引 论
1。2。4 优化 优化的任务在于对前段产生的中间代码 进行加工,以期在最后阶段产生更为高 效(省时间和空间)的代码 优化所依循的原则是程序的等价变换 规则 其方法有:公共子表达式的提取、循 环优化、删除无用代码等。
第一章 引 论
1。2。5 目标代码生成 这一阶段的任务:把中间代码(或经优
为此我们用T形图来表示源语言S、目 标语言T和编译语言I之间的关系,如果A 机器上已有一个用A机器码实现的某高级 语言L1的编译程序,则我们可以用L1语 言编写另一种高级语言L2的编译程序, 把写好的L2编译程序经过L1编译程序编 译后就可得到A机器代码实现的L2编译程 序。
第一章 引 论
我们还可以采用“自编译方式”产生 编译程序。方法是,先对语言的核心部 分构造一个小小的编译程序(可用低级 语言实现),在意他为工具构造一个能 够编译更多语言成分的较大编译程序。 如此扩展下去,就像滚雪球一样,越滚 越大,最后形成人们所期望的整个编译 程序。这种通过一系列的资占途径而形 成编译程序的过程叫做自编译过程。
在编译程序使用的表格中最重要的是符号表 它用来登记源程序中出现的每一个名字以及名子 的各种属性。如一个名字是常量名、变量名,还 是过程名等;如果是变量名它的类型又是什麽、 所站内存是多大、地址是什麽等。
第一章 引 论
1。3。3 出错处ຫໍສະໝຸດ 一个编译程序不仅能对书写正确的程序 进行编译,而且应能对处现在源程序中 的错误进行处理。如果源程序有错,编 译程序应设法发现错误,把有关错误报 告给用户。这部分的工作是由专门的一 组程序(叫做处错处理程序)完程的。
编译原理_清华大学_第2版_第1章 编译程序概论ppt

( *, y,
( +, x,
20
10.0, t1 )
t1, A )
目标代码生成
•任务:把中间代码变换成特定机器上 的绝对指令代码或可重定位的指令代 码或汇编指令代码。
•特点:与硬件系统结构和指令含义有 关,涉及到硬件系统功能部件的运用、 机器指令的选择、各种数据类型变量 的存储空间分配以及寄存器和后缓寄 存器的调度等。
21
A := x + y * 10 ( *, y, 10.0, t1 )
( +, x, MOVF
MULF MOVF
t1, y,
10.0, x,
A ) R2
R2 R1
ADDF
MOV
R1,
R1,
R2
A
22
符号表管理 • 符号表用来记录源程序中出现的标识符, 并收集每个标识符的各种属性信息。 • 符号表是由若干记录组成的数据结构,每 个标识符在表中有一条记录,每条记录有 多个域,每个域记载标识符的一个属性。
高级语言:使用便于理解的自然语言。
6
语言处理程序
• 解释程序(器):接受某种语言源程序,然后直接解释执行 源程序。
源程序 (高级语言 ) 初始数据
解释程序 计算结果 计算机
解释程序解释执行过程的示意图
7
•编译程序(器):接受某种语言的源语言程序后,
将它改造成另一种逻辑上等价的目标语言程序。
高级语言程序 (源程序 )
17
中间代码生成
将源程序生成一种内部表示形式,这种内部表 示形式叫中间代码。 中间代码:一种结构简单、含义明确的记号系统。 原则:
•容易生成;
•容易将它翻译成目标代码。
如四元式:
《编译原理课件》PPT课件

容易翻译成目标代码。 常用的中间代码有三地址码、四元式、三元
式、间接三元式、逆波兰表示(后缀式)、 树形表示等。
14
中间代码:四元式
例: id1:=id2+id3*10
sum:=first+count*10 翻译为四元式中间代码的形式:
5
1.2 编译程序的工作过程与结构
一个编译程序的整个工作过程是划分成阶段 进行的,每个阶段将源程序从一种表示形式 转换成另一种表示形式。
编译阶段的典型划分方法是划分为5个基本阶 段:词法分析、语法分析、语义分析产生中 间代码、代码优化、代码生成。
掌握编译过程的5个基本阶段,是学习编译原 理课程的基本内容。
29
自编译:T形图表示
PASCAL2
A代码
PASCAL2
A代码
PASCAL1 PASCAL1
A代码 A代码
用PASCAL1语言 编写的功能更
强的PASCAL2语 言编译程序的
A代码
已有的PASCAL1 语言的编译程序
自编译得到
功能更强的
PASCAL2语言 的编译程序
源程序
注意:T形图的组合规则:① ②
Java语言的操作平台无关性的实现就是如此。
26
1.3 编译程序的开发
构造编译程序,可以:
1. 使用机器语言或汇编语言作工具构造 2. 使用高级语言作工具构造 3. 使用机器语言或汇编语言构造编译程序的核心
部分,使用高级语言构造编译程序的扩充部分 4. 使用编译程序自动生成工具构造
使用高级语言作工具构造编译程序可以大大节 省程序设计的时间,并且编译程序易于阅读、 维护和移植。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表格管理(符号表管理)
1.1 什么是编译程序
例:欲将英语 I am a student
翻译成汉语:并假设有一种每个人都理解的语言,称为X语言。若英语 的句子为以下的形式:
Iamastudent 不符合词法规则,(1)符号“”没有定义;(2) 词法分析 单词间没有空格。
I am a studont “studont”不符合词法规则; 语法分析 a student am I 不符合语法规则;
1.1 什么是编译程序
从功能上看,编译程序就是一个语言翻译 程序。它把一种语言书写的程序(源程序) 翻译成另一种语言等价的程序(目标程序)。
高级语言程序 编译程序 源程序
低级语言程序 目标程序
1.1 什么是编译程序
显然,源程序所采用的语言和 目标程序所采用的语言的所有 的词法规则、语法规则,语义 规则,都应该已经定义。
2.保留字
var
4.逗号
,
6.逗号
,
8.冒号
:
10.分号
;
11.标识符 sum
12.赋值号 :=
13.标识符 first
14.加号
+
15.标识符 count
16.乘号
*
17.整数 10 19.界符 .
18.保留字 end
② 语法分析
任务∶根据语法规则,对词法分析输 出的单词序列分解成各类语法 短语,如“程序”、“语句”、 “表达式”等(也称为语法单 位)。可以表示成语法树误可发生在编译的各个阶段,错 误处理也是贯穿编译全过程。
词法分析阶段可查出的错误,如标 识符的组成不符合词法规则;语句结构 错误是在语法分析中可查出的错误;还 有语义分析阶段可查出的错误,即结构 正确,但所涉及的操作无意义或错误。
② 语法分析
例:如上例中sum:=first+count*10 (即 id1:=id2+id3*10 id表示标识符)经语法分析后得 知符合PASCAL语言的“赋值语句”语法规 则,则它可以表示成语法树,如下
赋值语句
标识符
:=
表达式
id1(sum)
表达式 +
表达式
标识符
表达式 * 表达式
id2(first)
③ 语义分析
例:如图1.4中的 为id1:=id2+id3*10整型和 实型相加,语义分析阶段进行类型审查后, 在语法分析得到的分析树上增加一语义处 理节点,表示整型转换为实型。如下图
:=
id1
+
id2
*
id3
int to real
10
图1.5
④ 中间代码生成 任务∶进行语法和语义分析后,有些
编译程序将源程序变成一种内 部表示形式,这种内部表示形 式叫做中间语言或者中间代码。 中间代码是一种记号系统,可 以设计为多种形式;设计的原 则为:容易生成、容易将中间 代码翻译成目标代码。
生成的某汇编代码如下图:
(1)MOVF id3,R2 (2)MULF #10.0,R2 (3)MOVF id2,R1 (4)ADDF R1,R2 (5)MOV R1,id1
图1.7
⑦ 符号表管理
符号表管理是一个贯穿编译全过 程的工作。编译程序在分析源程序时, 需要记录标识符的各种属性信息;在 语义分析和代码生成阶段,还要对建 立的符号表进行检索,提取相应的属 性信息。
如上例可以变换为下图:
(1)(int to real 10
-
(2)(*
id3 t1
(3)(+
id2 t2
(4)(:=
t3
-
t1) t2) t3) id3)
(1)(* id3 (2)(+ id2
10.0 t1)
t1
id1)
⑥ 目标代码生成
将语义分析程序产生的中间代码转换成汇 编程序或者机器语言。
如上例使用两个寄存器(R1和R2),可能
I am a student 符合词法、语法规则;并且可以根据英语的“语 义规则”得到这句话的含义。(语义分析) 假设把这句话先翻译成每个人都理解的X语言(中间代码生成)。 将用X语言翻译后的结果进行适当整理,得到言简意赅的,用X语 言表示的句子(代码优化)。最后,翻译为中文“我是一个学生” (目标代码生成)
1.1 什么是编译程序
需处理的源程序
程
序
预处理程序
设 计
源程序
语 言
编译程序
的 典
目标汇编程序
型
汇编程序
处
理 可再装配的机器代码
过
程 装配/连接--编辑程序 可再装配目标文件
绝对机器代码
1.2 编译过程概述
词语语
源 程 序
法 分
法 分
义 分
析析析
中
目
间代
标
目
代码
代
标
码优 码
程
生化 生
序
成
成
错误处理
④ 中间代码生成
例:如上述源程序sum:=first+count*10可以生
成如下的四元式序列,如下图
(1)(int to real 10 - t1)
(2)(*
id3 t1 t2)
(3)(+
id2 t2 t3)
(4)(:=
t3 - id3)
图1.6
⑤ 代码优化
对中间代码进行变换或改造,目 的是使生成的目标代码更为高效,即 节省时间和空间。
① 词法分析
例:某源程序片断如下:
begin var sum,first,count:real;sum:=first+count*10 end.
词法分析阶段将构成这段程序的字符组
成了如下单词序列:
1.保留字 3.标识符 5.标识符 7.标识符 9.保留字
begin sum first count real
标识符
整数
图1.4
id3(count)
10
② 语法分析
或
id1
:= +
id2
*
id3
10
图1.5
语法分析与语义分析都是对源程序的结 构进行分析。
③ 语义分析
任务∶对语法分析所识别的各种语法成分 的意义(即语义)进行确定并加以处理。语义 分析要对操作数是否已定义,是否类型相 同等进行检查,并根据检查的情况作出相 应处理。
1.2 编译过程概述
编译程序的两个主要任务∶ 一是分析,二是综合。
词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成
① 词法分析
任务∶从左至右一个字符一个字符地 读入源程序,对构成源程序的 字符流按照词法规则进行扫描 和分析,从而识别出一个个单 词(单词符号、符号,如 begin、 main、 if、 for)
第一章 编译程序概论
本章内容
1.1 什么是编译程序 1.2 编译过程概述 1.3 编译程序的结构 1.4 编译程序的组合 1.5 编译技术和软件工具
1.1 什么是编译程序
在计算机上执行高级语言程序一般分为两 步:第一步,用一个编译程序把高级语言 翻译成机器语言;第二步,运行所得到的 机器语言程序求得计算结果。