编译原理第一章编译引论
合集下载
编译原理课件chap1

第一章 引 论
1。4 编译程序与程序设计环境 。 编译程序无疑是实现高级语言的一个 最重要的工具。 最重要的工具。但支持程序设计人员进 行程序设计开发通常还需要其它一些工 如编辑程序、连接程序、 具:如编辑程序、连接程序、调试程序 等。编译程序与这些程序设计工具一起 构成所谓的程序设计环境。 构成所谓的程序设计环境。 程序设计环境 在一个程序设计环境中, 在一个程序设计环境中,编译程序起 着中心的作用。连接程序、调试程序、 着中心的作用。连接程序、调试程序、 程序分析等工具直接依赖于编译程序所 产生的结果,而其它工具的构造也常常 产生的结果, 要用到编译的原理、方法和技术。 要用到编译的原理、方法和技术。
第一章 引 论
1。3。5 编译前端与后端 。 。 前端主要由与源语言有关但与目标机无 前端主要由与源语言有关但与目标机无 关的那些部分组成。通常包括词法分析、 关的那些部分组成。通常包括词法分析、 语法分析、语义分析与中间代码产生, 语法分析、语义分析与中间代码产生, 有的代码优化工作,也可以包括在前端。 有的代码优化工作,也可以包括在前端。 后端包括编译程序中与目标代码有关的 后端包括编译程序中与目标代码有关的 部分,如与目标机有关的有关的优化, 部分,如与目标机有关的有关的优化, 和目标代码的生成等。 和目标代码的生成等。
第一章 引 论
第一章 引 论
1。5 编译程序的生成 。 以前构造编译程序大多是用机器语言 或汇编语言作工具的。 或汇编语言作工具的。为了充分发挥各 种不同硬件系统的效率, 种不同硬件系统的效率,为了满足各种 不同的具体要求, 不同的具体要求,现在许多人仍然使用 这种工具来构造编译程序( 这种工具来构造编译程序(或编译程序 的核心部分) 的核心部分) 但是越来越多的人已经使用高级语言 作工具来编译程序。 作工具来编译程序。因为这样可以大大 节省程序设计的时间, 节省程序设计的时间,热切构造出来的 编译程序易于阅读、维护和移植。 编译程序易于阅读、维护和移植。
1。4 编译程序与程序设计环境 。 编译程序无疑是实现高级语言的一个 最重要的工具。 最重要的工具。但支持程序设计人员进 行程序设计开发通常还需要其它一些工 如编辑程序、连接程序、 具:如编辑程序、连接程序、调试程序 等。编译程序与这些程序设计工具一起 构成所谓的程序设计环境。 构成所谓的程序设计环境。 程序设计环境 在一个程序设计环境中, 在一个程序设计环境中,编译程序起 着中心的作用。连接程序、调试程序、 着中心的作用。连接程序、调试程序、 程序分析等工具直接依赖于编译程序所 产生的结果,而其它工具的构造也常常 产生的结果, 要用到编译的原理、方法和技术。 要用到编译的原理、方法和技术。
第一章 引 论
1。3。5 编译前端与后端 。 。 前端主要由与源语言有关但与目标机无 前端主要由与源语言有关但与目标机无 关的那些部分组成。通常包括词法分析、 关的那些部分组成。通常包括词法分析、 语法分析、语义分析与中间代码产生, 语法分析、语义分析与中间代码产生, 有的代码优化工作,也可以包括在前端。 有的代码优化工作,也可以包括在前端。 后端包括编译程序中与目标代码有关的 后端包括编译程序中与目标代码有关的 部分,如与目标机有关的有关的优化, 部分,如与目标机有关的有关的优化, 和目标代码的生成等。 和目标代码的生成等。
第一章 引 论
第一章 引 论
1。5 编译程序的生成 。 以前构造编译程序大多是用机器语言 或汇编语言作工具的。 或汇编语言作工具的。为了充分发挥各 种不同硬件系统的效率, 种不同硬件系统的效率,为了满足各种 不同的具体要求, 不同的具体要求,现在许多人仍然使用 这种工具来构造编译程序( 这种工具来构造编译程序(或编译程序 的核心部分) 的核心部分) 但是越来越多的人已经使用高级语言 作工具来编译程序。 作工具来编译程序。因为这样可以大大 节省程序设计的时间, 节省程序设计的时间,热切构造出来的 编译程序易于阅读、维护和移植。 编译程序易于阅读、维护和移植。
编译原理第一章编译原理引论

些不再使用的变量占据的内存 Java设计来支持代码移植和代码移动
编译器技术的应用
针对计算机体系结构的优化 计算机体系结构的迅速演化引起对新的编译器技术一种不知足的需要 并行化 • 编译器重新整理指令,使得指令级并行更有效 • 编译器从传统的串行程序自动生成并行代码,使之运行于多处理器上 内存分层 • 编译器优化历来集中在优化处理器的执行上,但是现在更强调要使内存分层更有效
编译器技术的应用
程序翻译 二进制翻译 • 编译器技术可用于把一种机器的二进制代码翻译成另一种机器的代码,以运行原先为别的指令 集编译的代码 数据库查询解释器 • 数据库查询由一些谓词组成,这些谓词由包含关系运算的布尔表达式组成,可以被解释执行,也 可以被编译成搜索数据库的命令
编译器技术的应用
提高软件开发效率的工具 源于编译器中代码优化技术的程序分析一直在
改进软件开发效率 类型检查
类型检查是一种捕捉程序中前后不一致的成熟并且有效的技术 边界检查
数据流分析技术可用来定位缓冲区溢出 内存管理
自动的内存管理删除内存泄漏等内存管理错误
内容提要
编译器构造法的研究目的 编译器的结构
编译的基本原则 编译器应有的性质 编译器技术的应用 关于学习编译原理
5.代码优化
temp1 = inttoreal(60) temp2 = id3 * temp1 temp3 = id2 + temp2 id1 = temp3
代码优化器
temp1 = id3 * 60.0 id1 = id2 + temp1
任务:对于前阶段产生的中间代码进行加工 变换,以期在最后阶段产生更高效的目标代 码。
化的新研究 支持用户定义的聚合数据类型和高级控制流,如数组和记录、循环和过程调用:C、Fortran 面向对象的主要概念是数据抽象和性质继承,使得程序更加模块化并易于维护:Smalltalk、
编译器技术的应用
针对计算机体系结构的优化 计算机体系结构的迅速演化引起对新的编译器技术一种不知足的需要 并行化 • 编译器重新整理指令,使得指令级并行更有效 • 编译器从传统的串行程序自动生成并行代码,使之运行于多处理器上 内存分层 • 编译器优化历来集中在优化处理器的执行上,但是现在更强调要使内存分层更有效
编译器技术的应用
程序翻译 二进制翻译 • 编译器技术可用于把一种机器的二进制代码翻译成另一种机器的代码,以运行原先为别的指令 集编译的代码 数据库查询解释器 • 数据库查询由一些谓词组成,这些谓词由包含关系运算的布尔表达式组成,可以被解释执行,也 可以被编译成搜索数据库的命令
编译器技术的应用
提高软件开发效率的工具 源于编译器中代码优化技术的程序分析一直在
改进软件开发效率 类型检查
类型检查是一种捕捉程序中前后不一致的成熟并且有效的技术 边界检查
数据流分析技术可用来定位缓冲区溢出 内存管理
自动的内存管理删除内存泄漏等内存管理错误
内容提要
编译器构造法的研究目的 编译器的结构
编译的基本原则 编译器应有的性质 编译器技术的应用 关于学习编译原理
5.代码优化
temp1 = inttoreal(60) temp2 = id3 * temp1 temp3 = id2 + temp2 id1 = temp3
代码优化器
temp1 = id3 * 60.0 id1 = id2 + temp1
任务:对于前阶段产生的中间代码进行加工 变换,以期在最后阶段产生更高效的目标代 码。
化的新研究 支持用户定义的聚合数据类型和高级控制流,如数组和记录、循环和过程调用:C、Fortran 面向对象的主要概念是数据抽象和性质继承,使得程序更加模块化并易于维护:Smalltalk、
编译原理第1章-编译引论(原)

-27-
1.4 编译器的功能结构
• 考虑 “自然语言翻译”过程:从中文到英文
• 你能够通过自己的努力实现你的梦想!
识别单词
检查语法
检查语义
翻译
• 你能够通过自己的努力实现你的梦想!
You can put your dreams into reality through your efforts!
-28-
-29-
1.4 编译器的功能结构
-30-
1.4 编译器的功能结构
表处理
词
语
语
中
源
法
法
义
间
程
分
分
分
代
序
析
析
析
码
生
成
中
目
间
标
目
代
代
标
码
码
程
优
生
序
化
成
分析
错误处理
综合
-31-
1.4 编译程序的功能结构分解
if (x==j) z=0; else z=1;
词法分析
– 扫描源程序的字符流; if ( id eq id ) id ass 0 ; else id ass 1 ;
等价的另一种语言(目标语言)编写的程序。
错误
源程序
编译器
目标程序
• 目标程序若是可执行的机器语言程序,则可以被用户调用,处理输入并产生 输出。
输入
目标程序
输出(结果)
• 目标程序若是汇编语言的程序,则须经汇编器汇编后方可执行。 • 编译器的重要任务之一是报告它在翻译过程中发现的源程序中的错误。
-17-
-14-
第1章 编译引论 √ 1.1 程序设计语言及其历史
1.4 编译器的功能结构
• 考虑 “自然语言翻译”过程:从中文到英文
• 你能够通过自己的努力实现你的梦想!
识别单词
检查语法
检查语义
翻译
• 你能够通过自己的努力实现你的梦想!
You can put your dreams into reality through your efforts!
-28-
-29-
1.4 编译器的功能结构
-30-
1.4 编译器的功能结构
表处理
词
语
语
中
源
法
法
义
间
程
分
分
分
代
序
析
析
析
码
生
成
中
目
间
标
目
代
代
标
码
码
程
优
生
序
化
成
分析
错误处理
综合
-31-
1.4 编译程序的功能结构分解
if (x==j) z=0; else z=1;
词法分析
– 扫描源程序的字符流; if ( id eq id ) id ass 0 ; else id ass 1 ;
等价的另一种语言(目标语言)编写的程序。
错误
源程序
编译器
目标程序
• 目标程序若是可执行的机器语言程序,则可以被用户调用,处理输入并产生 输出。
输入
目标程序
输出(结果)
• 目标程序若是汇编语言的程序,则须经汇编器汇编后方可执行。 • 编译器的重要任务之一是报告它在翻译过程中发现的源程序中的错误。
-17-
-14-
第1章 编译引论 √ 1.1 程序设计语言及其历史
第一章_编译引论

主要内容: 几个基本概念:
– 翻译程序 – 汇编程序 – 编译程序 – 源程序 – 目标程序
编译器的工作过程及各个阶段的功能;
编译程序的实现途径; 与编译程序相关的其他程序:
–编辑器 –预处理器 –连接程序 –装配程序 –调试程序
1.1 程序设计语言和编译程序
一、程序设计语言
(一)低级语言(面向机器的言) ➢ 机器语言
– 1010 1001 0001 0110 0000 0001 – 0011 1100 0001 1000 0000 0001 – 0111 1100 0000 0101 – 0010 1101 0001 0101 0000 0000 – 1110 1010 0000 0011 – 0000 0101 0001 0101 0000 0000 – 0101 0011 0001 1000 0000 0001 – …………………..
(二)高级语言 形式语言:是指按一定逻辑关系及严格规定的符号来表达
某种事物以及进行信息交流的一种语言. 高级语言:模仿便于理解的自然语言和数学语言,采用一
组形式规则来描述的人工语言。 高级语言编程示例:
if (X<Y ) then Y:=X + 15 else Y:=X - 15; 高级语言的优点:
快,有着高级语言不可替代的用途。
① 70%以上的系统软件是用汇编语言编写的。 ② 某些快速处理、位处理、访问硬件设备等高 效程序需用汇编语言编写的。 ③ 某些高级绘图程序、视频游戏程序需用汇编 语言编写的。
汇编语言的缺点:汇编语言程序依赖于具体的机 器, 不具备移植性。
汇编语言是面向具体机型的,它离不开具体计 算机的指令系统,因此,对于不同型号的计算机, 有着不同的结构的汇编语言,对于同一问题所编制 的汇编语言程序在不同种类的计算机间是互不相通 的。
编译原理第一章 编译引论

静态存储分配
动态存储分配
1> 静态存储分配
若在编译时能完全确定程序所需空间大小,并能确定每个数 据项的地址,就可在编译时分配所需空间,这种分配方法称为静态 存储分配.
内情向量表组织如下:
L1
u1
d1
L2
u2
d2
Ln
un
dn
a
c
n
elemlength
17
整理课件
3)结构类型------- 记录
是由多种类型的数据组合起来的一种数据结构。Pascal 语 言中,可如下定义一种记录类型
type < 记录类型名> = record <域名 1>:<类型1>; <域名 2>:<类型2>;
26
整理课件
1>传值 调用程序把实际参数的值传递到形式参数的空间中.
a1 1 b1 1 a2 4 b2 5
x1 1 y1 1 x2 4 y2 5
主程序空间
子程序空间
这种方式,子程序一般不改变实际参数的值.
27
整理课件
2>传地址 调用程序把实际参数的地址传递到形式参数的空间中.
a1 1 b1 1 a2 4 b2 5
type <类型名> = set of <基类型>; <类型名> = array of <基类型>; <类型名> = record
end;
21
整理课件
2> 变量说明段 var <变量名表<类型2>;
<变量名表n>:<类型n>; 3> 函数及过程定义
function <函数名> (参数说明):<函数类型>; <函数体>; procedure <过程名> (参数说明) ; <过程体>; 4> 赋值句
动态存储分配
1> 静态存储分配
若在编译时能完全确定程序所需空间大小,并能确定每个数 据项的地址,就可在编译时分配所需空间,这种分配方法称为静态 存储分配.
内情向量表组织如下:
L1
u1
d1
L2
u2
d2
Ln
un
dn
a
c
n
elemlength
17
整理课件
3)结构类型------- 记录
是由多种类型的数据组合起来的一种数据结构。Pascal 语 言中,可如下定义一种记录类型
type < 记录类型名> = record <域名 1>:<类型1>; <域名 2>:<类型2>;
26
整理课件
1>传值 调用程序把实际参数的值传递到形式参数的空间中.
a1 1 b1 1 a2 4 b2 5
x1 1 y1 1 x2 4 y2 5
主程序空间
子程序空间
这种方式,子程序一般不改变实际参数的值.
27
整理课件
2>传地址 调用程序把实际参数的地址传递到形式参数的空间中.
a1 1 b1 1 a2 4 b2 5
type <类型名> = set of <基类型>; <类型名> = array of <基类型>; <类型名> = record
end;
21
整理课件
2> 变量说明段 var <变量名表<类型2>;
<变量名表n>:<类型n>; 3> 函数及过程定义
function <函数名> (参数说明):<函数类型>; <函数体>; procedure <过程名> (参数说明) ; <过程体>; 4> 赋值句
编译原理-第一

并行化编译技术
目的:提高并行计算机体系结构的性能。 超大规模计算的日益增长的需求 高性能计算机
第一章 引论
1.1 什么是编译程序 1.2 编译过程和编译程序的结构 1.3 研究领域 参考书
1。1 什么是编译程序
功能
高级程 序设计 语言书 写的程 序 术语 编译程序 低级语言 程序
源语言(程序)
目标语言(程序) 实现语言
S
I
O
1。1 什么是编译程序
分类
软件 系统软件 语言处理系统
代码优化
id1:= id2 + id3 * 60
(1) (2) (3) (4) (inttoreal ( ( ( * + := 60 id3 id2 t3 t1 t2 t1 t2 t3 id1 ) ) ) )
变换
(1) ( * id3 id2 60.0 t1 t1 id1 ) )
( 2)( +
解释程序直接将4的值输出(显示)
编译阶段和运行阶段存储结构
源程序缓冲区 名字表 目标代码缓冲区 数据区 编译用源程序中 间表示各种表格 目标代码区
编译时
运行时
解释系统存储结构
解释系统 源程序
工作单元
名字表
标号表
缓冲区 (输入输出) 栈区
1.3 研究领域
并行编译技术 交叉编译技术 硬件描述语言及其编译技术
骨架程序 预处理器 源程序
编译器
可重定位目标文件库 汇编器
目标汇编程序
可重定位机器代码
装配连接编辑
一个语言处理系统
绝对机器码
什么是编译程序
第1章 编译原理-引论

主要理论基础
构词规则
15
正则文法 自动机理论
1.2 编译程序的组成部分
❖1.词法分析
示例 ppoossiittiioonn ::== initial ++ rate * 60 ;;
单词类型 标识符(id1) 算符(赋值) 标识符(id2) 算符(加号) 标识符(id3) 算符(乘号) 整数 分号
单词值 position := initial + rate * 60 ;
▪ 张素琴,吕映芝等. 《编译原理》(第二版),清华大学 出版社
▪ 丁文魁,杜淑敏. 《编译原理和技术》,电子工业出版 社
❖ 推荐阅读
▪ 陈火旺,刘春林等.《程序设计语言编译原理》(第3版), 国防工业出版社
▪ Terence Parr. 《编程语言实现模式》,华中科技大学出 版社
4
第一章 引论 ❖编译程序概念 ❖编译程序的组成部分 ❖编译程序的组织 ❖编译程序的生成
▪ 特点:能支持交互环境,翻译一次执行一次。可移植性好,易于查错,
但速度慢
源程序 数据
解释程序
执行结果
9
❖示例
…… b:=2; a:=b+2; write a; ……
1.1 编译程序概念
…….
MOV #2.0 R1
MOV R1 b
编译程序 生成代码
MOV b ADD R1
R1 R2
执行
MOV R1 a
❖2.语法分析
示例 position := initial + rate * 60 ;
规则(扩展的巴赋克值斯语-瑙句:尔=范式EBNF)
<<赋表标值达识语式符p句>o:>s:=i:t:<i=o表:<n=标达识式符>表“>达“+式+”:=<”表<达表式达>式>
编译原理(第一章引论)

• 1.1程序设计语言与编译 • 2)程序设计语言的转换(续) • 编译的转换过程
– 两阶段转换:编译----运行 – 三个阶段的转换:编译----汇编----运行
1.1程序设计语言与编译 • 2)程序设计语言的转换(续)翻译 • 编译 • 解释
– 以源程序作为输入,不产生目标程序,一边解 释一边执行。 – 优点:直观易懂,结构简单,易于实现人机对 话 – 缺点:效率低
学习任务
• 1、掌握编译的理论基础和形式化系统 • 2、了解编辑的全过程以及具体实现方法
学习方法
• 1、认真听课,认真理解书中的基本概念、 基本原理与基本算法 • 2、弄懂书中的例题与习题 • 3、在看书时或理解立体时,一定要划出相 应的细节变化过程,通过画图来加深理解 • 4、在理解的基础上记忆 • 5、理论与实践结合
• 1.2编译程序概述 • 编译程序的工作 • 先看自然语言的翻译
– 1、识别出句子中的一个个单词 – 2、分析句子的语法结构 – 3、根据句子的含义进行初步翻译 – 4、对译文进行修饰 – 5、写出最后译文
• 1.2编译程序概述 • 编译程序的工作
– 词法分析 – 语法分析 – 语义分析和中间代码生成 – 优化 – 目词法分析(续) • 词法分析依照词法规则,识别出正确的单词,转 换成统一规格,备用。 • 转换
– – – – 对基本字、运算符、界限符的转换 标示符的转换 常数的转换 转换完成后的格式(类号+内码)
• 描述词法规则的有效工具是正规式和有限自动机
• 1.2编译程序概述 • 2、语法分析 • 任务:在词法分析的基础上,根据语言的 语法规则,把单词符号组成各类的单词单 位:短语、子句、语句、过程、程序。 • 语法规则:语言的规则,称为文法;规定 单词如何构成短语、语句、过程和程序。 • 语法规则的表示: • BNF A :: = B | C
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
局部化 将错误的影响限制在尽可能小的范围内
若能自动校正错误则更好,但其代价非常高
3.出错处理 源程序中的错误通常分为 : 语法错误 不符合语法(或词法)规则的错误 单词拼写错误、括号不匹配 ...
语义错误 不符合语义规则的错误 说明错误、作用域错误、类型不匹配 ...
一遍
语法分析器
4.遍
处于核心地位
6.编译程序生成的目标程序 a. 一定 b. 不一定
是机器语言的程序。 b
7.编译程序生成的目标程序
是可执行的程序。
b
a. 一定 b. 不一定
8、对编译程序而言,输入数据是
,输出数据是
。
源程序、目标程序
谢谢!
有穷状态技术
上下文无关文法 语法制导翻译 代码优化技术
文本编辑程序 情报检索 模式识别
建立多种文本处理程序 程序校验
由非结构化到结构化的程序转换
4.翻译程序(Translator)
翻译程序(Translator)是一种程序,其输入是某种语言的一系列语句,而其输出则是另一种 语言的一系列语句。
输入 源语言程序
NEXT
K (8) goto (2)
出口语句 (9)
将四元式重写为另一种形式的中间代码
((33)) (( **,, 1100,, KK,, TT11 ))
((44))((包++括,, 循II,,环TT1语1,,M句M开)) 始到有 同一控制变量的第一个
循彼环缺此语省相句的(连(5和5S)地)T出((被E出自口P**定口然,,语11义语序=0句0,句列, KK的称,, TT那为S22T些一))EP语循1句环的块 ((66))(( ++,, JJ,,TT22,,NN))
((77))(( ++,, KK,,11,, KK))
((88))(( jj,, ,, ,,((22))))
(9(9))(( 不正确
)) 正确嵌套
5.代码优化
任务
对于代码(主要是中间代码)进行加工变换,以期能够产生更为高效(省时间和 空间)的目标代码 。
所做转换 中间代码
依据 程序等价变换规则
中间代码(优化后)
任务
对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间 代码)。
所做转换
语法范畴
依据
语义规则
中间代码
主要理论基础
属性文法
4.中间代码生成 示例
生成四元式
循环块
(1) K := 1 循(2环) i语f 1句00<K goto (9)
((11))((::==,, 11,, ,,KK )) 块嵌套不可交叉,嵌套块控制变
主要理论基础
数据流方程
5.代码优化
示例
(1) M := I (2) N := J (3) K := 1
(4) if 100<K goto (9) (5) M := M + 10 (6) N := N + 10 (7) K := K + 1 (8) goto (4) (9)
((11)) KK ::== 11 ((22))iiff110000<<KKggoottoo((99))
遍 是对源程序或源程序的中间结果从
头到尾扫描一次,并作有关的加工处理,
生成新的中间结果或目标程序。
一遍 局部优化
一遍 全局优化
一遍
词法分析 语法分析 中间代码生成 代码优化 目标代码生成
5.编译前端与后端 编译前端主要由与源语言有关 但与目标机无关的那些部分组成
编译后端包括编译程序中 与目标机有关的那些部分
5. 自编译方式 先对语言的核心部分构造一个小小的编译程序(可用低级语言实现) 再以它为工具构造能编译更多语言成分的较大编译程序 如此不断扩展,最后形成整个编译程序(滚雪球)
6. 构造工具 构造编译程序的工具称为编译程序-编译程序、编译程序产生器或翻译程序书写系统
自动产生扫描器
LEX FLEX
自动产生语法分析器 YACC BISON
(2(2))((j量<j<不,1,10可000同, ,K名K, ,(9)) (9)
FOR K :=(3) T1 :1= 10T*OK 100
STEP 1
(4) M := I + T1
M
:=(5)
T2
:I=
10
+ *K
*
K
N :(=6) N :=J J + T+2
1T02
*
K
(7) K := K + 1
课堂习题与练习: 1、一个程序是正确的,包括两层含义:一是 (1) ;二是 (2) 。
答案:(1)书写正确(或合乎语法规则) (2)含义正确(或合乎语义规则)
2、描述如何用语言基本符号组成程序中各个语法成分的一组规则称为 (1) ;对程序 中各个语法成分含义的描述称为 (2) ;而涉及语言符号及其使用者之间的关系的内容 称为 (3) 。
源程序 (高级语言)
初始数据 输入
解释程序
计算结果 输出
1.编译过程的组成 源程序 编译过程
目标代码
词法分析 语法分析
中间代码生成 代码优化
目标代码生成
源程序 单词符号 语法单位 中间代码 中间代码(优化后)
目标代码
2.词法分析
任务
输入源程序;扫描、分解字符串,识别出一个个单词(关键字、标识符、运算符、 界符、常数)
编译原理第一章编译引论
1.编译程序历史 编译程序是系统软件中资格最老的成员之一 编译理论和技术近30年来发展十分迅速、成熟 现已形成一套较为系统化的编译理论和技术
2.编译理论与其他课程关系
操作系统 控制对象
编译理论 基础
自动机和形式语言
数据结构 素材
离散数学
3.编译理论的应用 编译理论 的许多想法和技术可用于一般软件的设计:
词法分析 语法分析 中间代码生成 代码优化 目标代码生成
1.编译程序的构造工具 以往 编译程序的构造大多采用机器语言或汇编语言
现在 编译程序的构造越来越多采用高级语言
有时为了充分发挥效率或满足不同需求,仍然采用 机器语言或汇编语言构造编译程序 (或其核心部分)
2. T型图 S表示源语言 S
T表示目标语言 T
I I表示编译程序的实现语言
3. 用高级语言L1构造编译程序
L2
A
L1 L1
L2
A
A A
A
将写好的语言L2的编译程序用L1的编译程序编译后 可已用有高就用级可A语得机言到器L用代1编A码机写实器另现代一的码个高实高级现级语的语言L言2L编L1的2译的编程编译序译程程序序
4. 编译程序的移植
(2)
答案:(1)语法 (2)语义 (3)语用
3、若源程序是用高级语言编写的,目标程序是 ,则其翻译程序称为编译程序。
答案:机器语言程序或汇编语言
4、编译方式与解释方式的根本区别在于 。 答案:是否生成目标代码
5、编译程序与具体的机器 (1) ,与具体的语言 (2) 。
a. 有关
b. 无关
答案:(1) a (2)a
所做转换
源程序字符串
依据
构词规则
主要理论基础
单词符号 自动机理论
2.词法分析 示例
关键字 标识符 分界符 运算符 常数
FOR
K :=
1 TO
100
FOR K := 1 TMO 100:=
M := I + 10 * K
N := J + 10 * K
NEXT K N
:=
I
+ 10
*K
J
+
10
*K
NEXT
K
3.语法分析
任务
在词法分析基础上,将单词符号串转化为语法单位(语法范畴)(短语、子句、 句子、程序段、程序),并确定整个输入串是否构成语法上正确的程序。
所做转换 单词符号
依据
语法规则
语法单位(语法范畴)
主要理论基础
上下文无关文法
3.语法分析
示例
FOR
NEXT
控制变K 量
:=
表初达1值式
TO
M 赋值:=句 I 表达+式 10表达式*
1.编译程序总框
源程序
词法分析 单词符号
语法分析
表
语法单位
出
格
中间代码生成
错
管
处
理
中间代码
理
代码优化
中间代码
目标代码生成
目标代码
2.表格与表格管理 编译各阶段均须维持表格并进行表格管理 建表的技术支持是数据结构 表格的分类、结构、处理方法决定于语言及机器,还有优化措施
2.表格与表格管理 编译程序涉及的表格有:
符号名表 常数表 标号表
入口名表 过程引用表
循环表 常量名、变量名、数组名、过程名、 性质、 引用、定义 各种类型常数的值
等价名表
标号的定义和公引用用链情表况
过程的入口名和格入式口表位置
外部过程的名字、引用位置 中间代码表
3.出错处理 一个好的编译程序应该:
全
最大限度发现错误
准
准确指出错误的性质和发生地点
面向机器代码 汇编 装配
目标程序代码
6.解释程序(Interpreter)
这是另外一种类型的翻译程序,在翻译过程它按照高级语言源程序在计算机上执行的动态顺序 对源程序的语句逐条翻译(解释),边解释边执行直至结束,它不产生目标程序,它的工作结果就 是源程序的执行结果,这样的一个翻译程序就称为解释程序。
6.目标代码生成