编译原理---总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
S→a|b S→Ha|Hb S→H1|H2 H→Ha|Hb
SaSBC SaSBC E→E*E CBBC CBBC E→(E) aBab aBd E→id bBbb bBbb E→E-E bCbc bCb cC cc
H→H1|H2
H→a|b
15
cC cc
E→E/E
文法的Chomsky体系
www.bjut.edu.cn
国家精品课程
——
3
《编译原理》
“编译原理”是一门非常好的课程
掌握“编译原理”中的基本概念、基本理论、基 本方法,在系统级上再认识程序和算法,提升计算 机问题求解的水平,增强系统能力,体验实现自动 计算的乐趣 实验情况
递归子程序、LL(1)、SLR(1)、LR(1) 多种形式的输入 LR(1)分析表的自动生成 错误处理与续编译
www.bjut.edu.cn
国家精品课程
——
4
《编译原理》
1 绪论——计算机语言的发展
机器语言(Machine Language)与汇编语言
(Assemble Language) 高级语言(High Level Language)
强制式语言(Imperative Language) 函数(应用)式语言(Functional Language) 逻辑式(基于规则)语言(Logical Language) 面向对象语言(Object-Oriented Language)
T' →*FT' |ε
F→(E)|id
终极符号
id
→TE' →+TE' →FT'
+
*
(
→TE'
)
#
→ε
→ε
→ε
→*FT' →(E)
→ε
→ε
www.bjut.edu.cn
21
国家精品课程
——
22
《编译原理》
4 自顶向下语法分析
语法图
简化语法图
递归子程序法
为每个语法变量编写一个处理子程序
www.bjut.edu.cn
E E E * E id3 id1 id2
www.bjut.edu.cn
E E id1 + E id2
* E
E
E
+
id3
国家精品课程
——
14
《编译原理》
2 文法与语言 有的文法的二义性是可以消除的 语言可以用不同文法产生
算术表达式文法2 算术表达式文法1 E→E+T|T
E→E+E|E*E|(E)|id
候选式: α→β1|β2|…|βn
推导(派生) :αAβαγβ A→γ∈ P
αβ; αnβ;α*β; α+β
句型:S *α α∈(VT∪VN)* 句子:S * x, x∈VT*
www.bjut.edu.cn
国家精品课程
——
11
《编译原理》
2 文法与语言
最左(Left-most)推导——最左分析
状态
0 1 2 3 4 5 6
动作表 action a b # s3 s4 acc s3 s4 s3 s4 r3 r3 r3 r1 r1 r1 r2 r2 r2
转移表 goto S B 1 2
5 6
www.bjut.edu.cn
国家精品课程
——
32
《编译原理》
LR 分析表的构造
拓广文法——给出分析开始和结束状态
www.bjut.edu.cn
国家精品课程
——
8
《编译原理》
T 形图
表示语言翻译的 T 形图
源语言 目标语言
表示语言
功能
1) 交叉编译/移植:用A机的C编译构造B机的C编译 2) 本机编译器利用:用A机的C编译构造A机的B编译
3) 自展技术
www.bjut.edu.cn
国家精品课程
——
9
《编译原理》
www.bjut.edu.cn
国家精品课程
——
17
《编译原理》
3ຫໍສະໝຸດ Baidu词法分析
RG
FA
A→a
A
a
B
A→aB
正规定义式FA
A→rs*
A
a s
词法分析器的实现
按状态转移图设计主程序 设计适当的子程序 A r
www.bjut.edu.cn
国家精品课程
——
18
《编译原理》
4 自顶向下语法分析
左句型
最左推导对应最右归约
最右(Right-most)推导——最右分析
规范推导、规范句型(右句型)
最右推导对应最左归约(规范归约)
www.bjut.edu.cn
国家精品课程
——
《编译原理》
2 文法与语言
语言:L(G)={x|S* x & x∈VT*} E 短语:如果S*αA id1 β+αγβ
方法
算符优先分析法 LR分析法
www.bjut.edu.cn
国家精品课程
——
26
《编译原理》
分析器结构
输入缓冲区 id + id * id # 输出产生 式序列
+
E 栈
移进归约 控制程序
分析表
#
4种操作:移进、归约、接受、出错 栈内容 ♁ 输入缓冲区内容=#“当前句型”# ??LL(1)分析法
www.bjut.edu.cn
编译程序总体结构
源程序
词法分析器 表 格 管 理
单词符号
出 错 处 理
语法分析器
语法单位
语义分析与中间代码生成器
中间代码
代码优化器
中间代码
目标代码生成器
目标代码
国家精品课程
——
7
《编译原理》
编译的遍(Pass)
根据系统资源的状况、运行目标的要求…… 等,可以将一个编译程序设计成多遍扫描, 在每一遍扫描中,完成不同的任务
2 文法与语言
字母表∑ :非空有穷集合 字母表的乘积: ∑1∑2={ab|a∈∑1,b∈∑2}
∑*、∑+
x∈∑*, L ∑*, x∈ L
ε语句
www.bjut.edu.cn
国家精品课程
——
10
《编译原理》
2 文法与语言
文法:G = (VT,VN,P,S)
α→β ∈P
BNF: ∷=,[ ],{ }lu,{ }m
www.bjut.edu.cn
国家精品课程
——
27
《编译原理》
算符优先分析法
根据当前输入符号a与栈顶符号b的优先 级确定动作:
if b≮a then 移进——归约对象未形成
if b≡a then 移进——归约对象未形成
if b≯a then 归约——归约对象已形成
if a=b=# then 接受——分析成功
国家精品课程
——
16
《编译原理》
3 词法分析
词法分析器的功能,在编译程序中的“位置” 缓冲区设计(双缓冲) 正规(表达)式
a|(a|b)*cc(a|b)+ ((0|1)(0|1))* (00|01|10|11)*
正规定义式
S→((0|1)(0|1))*
正规式(表达式)与正规文法等价 FA(状态转移图)是一个有力的工具
www.bjut.edu.cn
国家精品课程
——
19
《编译原理》
4 自顶向下语法分析
LL(1)文法
A→α1|α2|…|αn FIRST(αi)∩FIRST(αj)=Φ i≠j 当ε∈FIRST(αj)时,FOLLOW(A)∩FIRST(αi)=Φ
求FIRST(α)的算法
α=X1 X2…Xn
求FOLLOW(B)的算法
# ∈ FOLLOW(S) A→αBβ 当ε∈FIRST(β)时
• FOLLOW(B)=FOLLOW(B)∪(FIRST(β)–{ε})∪FOLLOW(A)
www.bjut.edu.cn
国家精品课程
——
20
《编译原理》
4 自顶向下语法分析
输入缓冲区(符号序列)
www.bjut.edu.cn
33
I0 : S’→.S S→.L=R S→.R L→.*R L→.id R→.L
S
I1 : S’→S. I2 : S→L.=R R→L. I3 : S→R.
L
=
I6 : S→L=.R R→.L L→.*R L→.id
I9 : R S→L=R.
www.bjut.edu.cn
国家精品课程
——
29
《编译原理》
LR 分析法
关键概念
规范句型活前缀——规范句型(右句型)的不 含句柄右边任何符号的前缀
句柄形成情况的表示——LR(0)项目:
A→α.β 移进项目: A→α.aβ
待约项目: A→α.Bβ
归约项目: A→α.
www.bjut.edu.cn
T→T* F|F
F→( E )| id
www.bjut.edu.cn
15
2 文法与语言
0型文法 (PSG) 1型文法 (CSG) 2型文法 (CFG) 3型文法 (RG) 3型文法 (RG)
SaBC
SaBC
E→E+E
S→a|b S→aT|bT T→a|b T→1|2 T→aT|bT T→1T|2T
1
总 结
国家精品课程
——
2
《编译原理》
“编译原理”是一门非常好的课程
Alfred V.Aho:编写编译器的原理和技术具有十 分普遍的意义,以至于在每个计算机科学家的研 究生涯中,本书中的原理和技术都会反复用到 “自顶向下”和“自底向上”的系统设计方法( 思想、方法、实现全方位讨论) 一些具体的表示和变换算法 一个相当规模的系统的设计(含总体结构)
命令语言(Command)
www.bjut.edu.cn
国家精品课程
——
《编译原理》
翻译系统—汇总
ML MLP
Run System Data Result
Assembler AL ALP
Disassembler Translator
Compiler
HL HLP
Data
Interpreter Result
If a与b无优先关系 then 出错
www.bjut.edu.cn
国家精品课程
——
28
《编译原理》
算符优先分析法
算符文法(不含形如 A→αBCβ 的产生式) 算符优先级
栈内栈外、优先函数
算符优先文法
素短语和最左素短语 句型#N1a1 N2a2… Nnan #的最左素短语是满足下列条 件的最左子串 Niai Ni+1ai+1… Njaj Nj+1 其中:ai-1≮ai≡ai+1≡…≡aj-1≡aj≯aj+1
语法分析方法分类
回溯(虚假匹配)、左递归、二义性 消除左递归
A→Aα1|Aα2|…|Aαn|β1|β2|…|βm Aβ1 B|β2 B |…|βn B Bα1 B|α2 B |…|αn B|ε
提取公共左因子
A→αβ1|αβ2|…|αβn |γ1|γ2|… | γm A→αA’|γ1|γ2|… | γm和 A'→β1|β2|…|βn
LL(1)分析 器系统结构
栈
控制程序 P 77
输出的 产生式 序列
预测分析表M
LL(1)通用控制算法 预测分析表的构造算法
www.bjut.edu.cn
国家精品课程
——
《编译原理》
表达式文法的预测分析表
E→TE'
语法 变量 E E' T T' F
→id
→FT'
E' →+TE' |ε
T→FT'
G=(VN ∪ {S’}, VT, P ∪{S’→S}, S’) S’V 对应S’→.S(分析开始)和S’→S.(分析成功)
识别CFG G的拓广文法的所有规范句型活前缀的 DFA
以项目集{S’→.S }的闭包为启动状态 分析器的状态——某个项目集闭包 后继项目
项目集规范族——DFA的全部状态
30
LR分析器的总体结构
输入缓冲区
a1 … ai … an #
状态/符号栈
Sm Xm Sm-1 Xm-1 … … … … … … S1 X1 S0 #
LR主控程序
产生式 序列
动作表 action
转移表 goto
分析表
国家精品课程
——
31
《编译原理》
LR 分析表:action[s,a];goto[s,X]
直接短语、句柄
E
+ E E *
E id3
id2
+ id1 * id2
www.bjut.edu.cn
语法(分析)树
用树的形式表示句型的生成/结构
(抽象)语法树
去掉对翻译不必要的信息
id3
国家精品课程
——
13
《编译原理》
2 文法与语言
二义性
推导:两个不同的最左推导;两个不同的最
右推导
语法树:两棵不同的语法树
23
+
E T * T
E→T(+T)*
简化的语法图
T→F(*F)*
F
F
(
E
)
F→(E)|id
id
国家精品课程
——
24
《编译原理》
简单算术表达式的分析器
E的子程序(E→T(+T)*) procedure E; begin T; while lookhead='+' do begin match(‘+’); T end end;
T的过程调用 lookhead:当前符号 当前符号等于+时 处理终结符+ T的过程调用
www.bjut.edu.cn
国家精品课程
——
25
《编译原理》
5 自底向上语法分析
思想
从输入串出发,反复利用产生式进行归约,如果最 后能得到文法的开始符号,则输入串是句子,否则 输入串有语法错误
核心
寻找句型中的当前归约对象——“句柄”进行归约, 用不同的方法寻找句柄,就可获得不同的分析方法