第六章 自底向上优先分析(编译原理)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
例1:文法 :文法G[S]: : (1) S → aAcBe (2) A → b (3) A → Ab (4) B → d
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
步骤 符号栈
1) ) 2) ) 3) ) 4) ) 5) ) 6) ) 7) ) 8) 8) # #a #ab #aA #aAb #aA #aAc #aAcd
. 当且仅当G (1) X = Y当且仅当G中存在产生式规则
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
A A A
…XY… XY… …XB…,且B + Y… XB… …BD…,且B + …X和D * Y… BD…
. 当且仅当G (2) X < Y当且仅当G中存在产生式规则
> 当且仅当G (3) X . Y当且仅当G中存在产生式规则
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
A … … s t ...
A … … s t … ...
A … … s t … ...
1.s 1.s在句柄 中 ,而 t不 在句柄中
2.s 2.s与t均 在句柄中
3.s 3.s不在句柄 中,而t在句 柄中
对于上述情况,我们规定: 对于上述情况,我们规定: 情况1 s>t;情况2 s=t;情况3 情况1:s>t;情况2:s=t;情况3:s<t
6
移进- 2.实现方式-“移进-归约”方式 实现方式- 移进 归约”
a+b……#
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
【注】初态时栈内仅有栈底符“#”, 初态时栈内仅有栈底符“ 读头指在最左边的单词符号上。 读头指在最左边的单词符号上。
#
语法分析程序 语法表
输出带
自左至右把输入串的符号一个一个移进栈 自左至右把输入串的符号一个一个移进栈,在移 移进 进过程中不断查看栈顶符号串, 进过程中不断查看栈顶符号串,一旦形成某个句型的 句柄时,就将此句柄用相应的产生式左部替换( 句柄时,就将此句柄用相应的产生式左部替换(归 ),若再形成句柄 就继续替换, 若再形成句柄, 约),若再形成句柄,就继续替换,直到栈顶不再形 成句柄为止。然后继续移进符号, 成句柄为止。然后继续移进符号,重复上面的过程直 到栈顶只剩下#和文法的开始符号,输入串读完为止, 到栈顶只剩下#和文法的开始符号,输入串读完为止, 这样就认为识别了一个句子。 这样就认为识别了一个句子。
4
引言
注意:输入串在这里是指从词法分析器送 来的单词符号组成的二元式的有限序列。
1.基本思想
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
自下而上的语法分析过程是一个最左归约的过程, 自下而上的语法分析过程是一个最左归约的过程 , 从输入串开始, 朝着文法的开始符号进行归约, 从输入串开始 , 朝着文法的开始符号进行归约 , 直到到达文法的开始符号为止的过程。 直到到达文法的开始符号为止的过程。 从语法树角度看, 从语法树角度看 , 是以输入符号串作为语法树的 末端结点符号串, 自底向上地构造语法树, 末端结点符号串 , 自底向上地构造语法树 , 使文 法开始符号正好是该语法树的根。 法开始符号正好是该语法树的根 。 如果最终根结 点是开始符号, 则输入符号串是语言的一个句子, 点是开始符号 , 则输入符号串是语言的一个句子 , 否则不是。 否则不是。 自底向上分析过程实际上是一个不断进行直接归 约的过程。 约的过程。
2
教学内容
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
第一节 第Leabharlann Baidu节
自底向上优先分析概述 简单优先分析法
3
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
从输入串开始,逐步进行“归约” 从输入串开始,逐步进行“归约”,直 至归约到文法开始符号;或者说, 至归约到文法开始符号;或者说,从语法树 的末端开始,步步向上“归约” 的末端开始,步步向上“归约”,直到根结 点。
a < = < > > > ) # > >
S S b A ( B a ) #
11
(2)未真正解决句柄的识别
上述分析过程是怎样识别句柄 上述分析过程是怎样识别句柄的,主要看栈顶符号串 识别句柄的 是否形成规则的右部。 是否形成规则的右部。
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
这种做法形式上是正确的,但在实际上不一定正确。 这种做法形式上是正确的,但在实际上不一定正确。 举例的分析过程可以说是一种巧合。 举例的分析过程可以说是一种巧合。 因为不能认为: 因为不能认为: 对句型 xuy 而言 若有U→u, 就断定u是简单短语, 若有U→u,即U⇒u 就断定u是简单短语, * u 就是句柄,而是要同时满足 Z⇒ xUy 就是句柄,
. 对任何X 若文法开始符号S (4)对任何X,若文法开始符号S + X…,则#< X; ,
若有S 若有S + …X,则X . #。 X >
17
三.从语法树判别优先性
• 设G是已化简的文法,s,t∈V,若G中存在规范句型 是已化简的文法,s,t∈ st…, s,t与 α=…st , 则s,t与α的句柄之间的关系必有下述情况 st 之一: 之一:
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
进行一次归约
输入串扫描完否? Y 栈中仅有开始符号? 输入串合法,报告分析报告 出口
no no
error
移进移进-归约过程
10
说明: 说明: 例子的分析过程是一步步地归约当前句型 当前句型的句柄 (1)例子的分析过程是一步步地归约当前句型的句柄
7
3.语法分析程序执行的动作
移进 读入下一个输入符号并压入栈内,读头后移;
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
归约 检查栈顶若干个符号能否进行归约,若能,就 以产生式左部替代该符号串,同时输出产生式; 接受 移进-归约的结局是栈内只剩下栈底符号和文 法开始符号,读头也指向语句的结束符; 报错 当识别程序察觉一个错误,因此输入符号串不 是句子而无法继续识别工作时,调用一个出错处理 子程序进行处理或停止。
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
指导教师:杨建国 指导教师 杨建国 二零零七年十一月
1
第6章 自底向上优先分析
语法分析
推导
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
自上而下的语法分析过程 预测分析程序,递归下降分析法(最左推导) 注:要求文法是LL(1)文法
归约
自下而上的语法分析过程 简单优先分析法,算符优先分析法,LR分析法
15
§6.2 简单优先分析法
6.2.1 优先关系
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
一.优先关系的符号表示
. 表示X X=Y表示X和Y的优先关系相等
X . Y表示X的优先性比Y的优先性大 > 表示X的优先性比Y
. 表示X的优先性比Y X < Y表示X的优先性比Y的优先性小
16
二.优先级别定义
13
二.简单优先分析法
基本思想: 基本思想:按一定原则定义文法中所有符号 终结符和非终结符)之间的优先关系, (终结符和非终结符)之间的优先关系,按照 这种关系确定归约过程中的句柄并实行归约。 这种关系确定归约过程中的句柄并实行归约。
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
是一种规范归约。 是一种规范归约。 简单优先分析法准确、规范,但效率低,不实 简单优先分析法准确、规范,但效率低, 不流行。 用,不流行。
5
分析过程是重复以下步骤: 分析过程是重复以下步骤:
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
1、找出当前句型的句柄 x (或句柄的变形) 或句柄的变形) 2、找出以x为右部的规则X→x 找出以x为右部的规则X 3、把x规约为X,产生语法树的一枝 规约为X
关键:找出当前句型的句柄x 或其变形),这不是很容易。 关键:找出当前句型的句柄x(或其变形),这不是很容易。 ),这不是很容易
对输入串abbcde#的移进 归约分析过程 的移进-归约分析过程 对输入串 的移进
a b b c d e 符号串abbcde是否是G[S]的句子 符号串abbcde是否是G[S] abbcde是否是G[S]的句子 S⇒ aAcBe ⇒ aAcde ⇒ aAbcde ⇒ abbcde ⇒
9
顺序扫描输入符号并依次移进 栈 栈顶部的符号串是否构成一句 柄? Y N
12
§6.1 自底向上优先分析概述
一.优先分析法的类别
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
1.优先分析器( Parser) 1.优先分析器(Precedence Parser 优先分析器 •简单优先分析法 简单优先分析法 •算符优先分析法 算符优先分析法 2.LR分析器 2.LR分析器
19
结论
在句型中,句柄内各相邻符号之间具有相同的优先级。
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
由于句柄要先归约,所以规定句柄两端符号的优先级 要比位于句柄之外的相邻符号的优先级高。 句型中Ni……Nj是句柄,则 . . . N1…Ni-1 < Ni = …… = Nj . Nj+1…Nn > 【注】优先分析法基本思想也可以表述为: N N 若句型中Ni……Nj是句柄,语法分析程序可以 . 通过寻找Ni-1 < Ni和Nj . Nj+1 这两个关系来确定句 > 柄的头尾,从而确定句柄进行归约。
14
三.算符优先分析法 基本思想: 基本思想:只定义文法中终结符之间的优先 关系(不考虑非终结符), ),并由这种关系指 关系(不考虑非终结符),并由这种关系指 导分析过程
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
不是规范归约 算符优先分析法分析速度快, 算符优先分析法分析速度快,特别适用于表 达式的分析。缺点是不规范, 达式的分析。缺点是不规范,常常要采用适 当措施克服其缺点。 当措施克服其缺点。
21
例2
文法G[S]: : 文法 (1) S → bAb (2) A → (B|a (3) B → Aa)
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
如何确定优先关系? 如何确定优先关系? 1.求 . 关系: 1.求=关系: (1): 由(1):b=A A=b (2): 由(2):(=B (3): 由(3):A=a a=)
输入符号串
abbcde# bbcde# bcde# bcde# cde# cde# de# e# e# # #
动作
移进 移进 归约(A→ 归约 →b) 移进 归约(A→ 归约 →Ab) 移进 移进 归约(B→ 归约(B→d) 移进 归约(S →aAcBe) 接受
S A A B
9) #aAcB ) 10) #aAcBe ) 11) #S )
该句子的唯一语法树为: 该句子的唯一语法树为:
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
S A B d e
注意两点: 注意两点:
A a b b c
(a)栈内符号串+ 未处理输入符号串 = 当前句型 栈内符号串+ (b)句柄都在栈顶 实际上,以上分析过程并未真正解决句柄的识别问题 实际上,
20
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
我们可以通过两个相邻符号S 我们可以通过两个相邻符号SiSi+1之间的关系 来找到句柄: 来找到句柄:
–SiSi+1在句柄内:必然有规则U→ SiSi+1… S 在句柄内:必然有规则U→ U→…S –Si在句柄内部,但是Si+1在句柄之后,必然有规则 S 在句柄内部,但是S 在句柄之后, U→…S 且存在规范句型…US …。 U→…Si,且存在规范句型…USi+1…。 –如果Si+1在句柄内,而Si在句柄外,那么必然存在 如果S 在句柄内, 在句柄外, 如果 规范句型…S 规范句型 SiU…,且有U→Si+1…。 ,且有U→S 。
18
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
另外,还有一种情况,就是s 另外,还有一种情况,就是s和t均不在句柄中,那 均不在句柄中, 么一定存在某句型使得它们进入上述三种情况之一。 么一定存在某句型使得它们进入上述三种情况之一。 在任何句型中都不可能相邻出现, 若s和t在任何句型中都不可能相邻出现,则我们 规定二者无关系 无关系。 规定二者无关系。 注意,这种优先关系是不对称 注意,这种优先关系是不对称的! 不对称的
相关文档
最新文档