- 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.目标代码生成