编译原理与技术讲义.ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动作
移进a 移进b 归约:Ab 移进b 移进c
2020/11/13
《编译原理与技术》讲义
12
移进-归约分析
e.g.17 用栈来实现串abbcde$的分析(2)
分析栈 $aAbc $aA $aAd $aAB $aABe $S
2020/11/13
输入串
动作
de$ de$ e$ e$ $
移进c 归约: AAbc 移进d 归约:Bd 移进e
串abbcde$的对应分析树 的建立过程。
S
AB A
2020/11/13
输入串 a b b c d e $
《编译原理与技术》讲义
11
移进-归约分析
e.g.17 用栈来实现串abbcde$的分析(1)
分析栈 $ $a $ab $aA $aAb $aAbc
输入串 abbcde$ bbcde$ bcde$ bcde$ cde$ de$
2020/11/13
《编译原理与技术》讲义
2
自底向上分析
分析技术的关键-句柄的识别
句柄(handle)是什么? 一般地,如果有以下最右推导序列,
S r*m A rm ,AP
则产生式A及其在右句型中的位置称为右 句型的句柄。
2020/11/13
《编译原理与技术》讲义
3
自底向上分析
e.g.17 文法G6
S a
分析栈
“句柄”?
输入串:
$... … if E then S
else... …
2020/11/13
当前输入符号
《编译原理与技术》讲义
16
文法G7: S if E then S | if E then S else S | a
-移进动作
分析栈
栈顶
期待新的“长句柄” 输入串:
$... … if E then S else
串abbcde$的对应分析树 的建立过程。
A
2020/11/13
输入串 a b b c d e $
《编译原理与技术》讲义
8
自底向上分析
e.g.17 文法G6 1)SaABe 2)AAbc 3)Ab 4)Bd
串abbcde$的对应分析树 的建立过程。
A A
2020/11/13
输入串 a b b c d e $
《编译原理与技术》讲义
6
自底向上分析
e.g.17 文法G6 1)SaABe 2)AAbc 3)Ab 4)Bd
串abbcde$的对应分析树 的建立过程。
A
2020/11/13
输入串 a b b c d e $
《编译原理与技术》讲义
7
Leabharlann Baidu
自底向上分析
e.g.17 文法G6 1)SaABe 2)AAbc 3)Ab 4)Bd
∙ 接受(accept)-分析成功!
∙ 报错(error)-出现语法错误,调错误恢复例程
2020/11/13
《编译原理与技术》讲义
14
移进-归约分析
怎么可能呢?
分析动作冲突
∙ 移进-归约冲突(shift-reduce conflict)
当“句柄”处于栈顶时,分析动作指示既
可以将下一输入符号移入栈顶top,又可以实 施归约操作。如何动作呢?
... …
-归约动作
分析栈
输入串:
$ … …S
else ... …
2020/11/13
《编译原理与技术》讲义
17
移进-归约分析冲突
e.g.19 二义性文法G8如下: EE+E | E * E | (E) | id
输入串id+id+id$的最右推导: 1)EE+EE+idE+E+idE+id+idid+id+id
《编译原理与技术》讲义
9
自底向上分析
e.g.17 文法G6 1)SaABe 2)AAbc 3)Ab 4)Bd
串abbcde$的对应分析树 的建立过程。
AB A
2020/11/13
输入串 a b b c d e $
《编译原理与技术》讲义
10
自底向上分析
e.g.17 文法G6 1)SaABe 2)AAbc 3)Ab 4)Bd
$
r: SaABe
分析成功!
《编译原理与技术》讲义
13
移进-归约分析
四种分析动作(action)
∙ 移进(shift)-将当前输入符号移入栈顶top
(why?)
∙ 归约(reduce)-当“句柄”出现在栈顶(从栈
中某处到栈顶top),则将“句柄”从栈顶弹弹出, 并将相应产生式左部非终结符置入栈顶top。 (when?)
串abbcde$的对应分析树 的建立过程。
2020/11/13
输入串 a b b c d e $
《编译原理与技术》讲义
5
自底向上分析
e.g.17 文法G6 1)SaABe 2)AAbc 3)Ab 4)Bd
串abbcde$的对应分析树 的建立过程。
2020/11/13
输入串 a b b c d e $
id+id$
+id$
+id$
移进
+id$ id$
分析2)
$ $id $E $E+ $E+id $E+E $E+E+
串abbcde$的分析过程。
1)SaABe 2)AAbc 3)Ab
最 S$
右 aABe$ 推
4)Bd
导 aAde$
最
aAbcde$
左 归
输入串 a b b c d e $ 约
2020/11/13
《编译原理与技术》讲义
4
自底向上分析
e.g.17 文法G6 1)SaABe 2)AAbc 3)Ab 4)Bd
2)EE+EE+E+EE+E+idE+id+idid+id+id
带下划线的符号串是相应句型的句柄。
2020/11/13
《编译原理与技术》讲义
18
e.g.19输入串id+id+id$的栈分析过程
分析1)
$ $id $E $E+ $E+id $E+E 归约 $E
输入串
id+id+id$
+id+id$
+id+id$
编译原理与技术
--自底向上分析
2020/11/13
《编译原理与技术》讲义
1
自底向上分析
移进-归约分析 分析树的构建
从叶子结点开始,逐步构造各内部结点直至根结点出现。
分析技术的关键-句柄的识别
句柄(handle)是什么? 简单讲,句柄是一个产生式的右部;自底向上分析(移 进-归约分析)过程,其实就是发现句柄并将句柄(产 生式右部)替换成相应左部非终结符的过程。该替换称 为最左归约,它对应着某最右推导逆过程的一步。
∙ 归约-归约冲突(reduce-reduce conflict)
位于栈顶的“句柄”,同时匹配两个(以 上)产生式的右部。选谁呢?
2020/11/13
《编译原理与技术》讲义
15
移进-归约分析冲突
二义文法G不适合移进-归约分析
e.g. 18 移进-归约冲突
文法G7: S if E then S | if E then S else S