
第5章自底而上优先分析 ■自底向上分析简介 ■回顾:短语、直接短语和句柄 ■自下而上分析基本问题 ◆归约规范归约 ◆举例p103 2025/4/2 课程目录 ☑1
2025/4/2 1 第5章 自底而上优先分析 ◼自底向上分析简介 ◼回顾:短语、直接短语和句柄 ◼自下而上分析基本问题 ◆归约 规范归约 ◆举例 p103 课程目录

文法G: 自下而上分析简介 E→E+TT E T→TFF F→(E)|i 输入串:w=i*i+i E= 输入串最终能归约到 开始符号,说明输入串是 文法的一个句子,分析成 功结束。 2025/4/2 ☑D2
2025/4/2 2 文法G: 自下而上分析简介 E→E+T|T T→T*F|F F→(E)|i 输入串:w=i*i+i 最 右 推 导 E E + T F i T T * F F i i 最 左 归 约 E==>E+T ==>E+F ==>E+i ==>T*F+i ==>T*i+i ==>F*i+i ==>i*i+i ==>T+i 输入串最终能归约到 开始符号,说明输入串是 文法的一个句子,分析成 功结束

自下而上分析基本思想p103 ■从输入串出发,逐步进行归约,直至归约 到文法的开始符号,那么输入串是文法的 句子,否则输入串有语法错误 ■或者说,从语法树的末端开始,步步向上 归约,修剪语法树,直到只剩根结点 ■归约一用产生式的左部替代右部 ■关键 寻找每步句型中可归约串 寻找方式不同,分析方法不同 ■效率更高,对语法限制更少 2025/4/2 章节目录☑)3
2025/4/2 3 自下而上分析基本思想 p103 ◼从输入串出发,逐步进行归约,直至归约 到文法的开始符号,那么输入串是文法的 句子,否则输入串有语法错误 ◼或者说,从语法树的末端开始,步步向上 归约,修剪语法树,直到只剩根结点 ◼归约——用产生式的左部替代右部 ◼关键——寻找每步句型中可归约串 寻找方式不同,分析方法不同 ◼效率更高,对语法限制更少 章节目录

利用语法树寻找句型的短语、句柄等 ■寻找方法 句型n=E+T*i E① 句型n的语法树有: ▣n个内部节点一n棵子树 on棵子树一n个短语 每颗子树的叶结点从左至右排 列组成一个短语 口m棵直接子树一m个直接短语 只有父子两代 3个短语E+T*iT*ii 1个直接短语 i 口最左直接子树一句柄 句柄i 2025/4/2 章节目绿 ☒)4
2025/4/2 4 利用语法树寻找句型的短语、句柄等 句型η=E+T*i E E + T T * F i ◼寻找方法 句型η的语法树有: n棵子树——n个短语 m棵直接子树——m个直接短语 最左直接子树——句柄 ① ② ③ 3个短语 1个直接短语 i 句柄 i E+T*i T*i i 只有父子两代 n个内部节点——n棵子树 每颗子树的叶结点从左至右排 列组成一个短语 章节目录

自下而上分析基本问题 归约与移进归约法 规范推导与规范归约 移进归约分析器 要解决的基本问题? 2025/4/2 章节目录 D5
2025/4/2 5 自下而上分析基本问题 ◼归约与移进归约法 ◼规范推导与规范归约 ◼移进归约分析器 ◼要解决的基本问题? 章节目录

归约与移进归约法 ■归约 ◆推导的逆过程当A→Y是文法G的一个产生 式,且a、B∈V*,则aYB能直接归 约到aAB ◆例如E+T==>E+TF,那么E+T*F可以归约到E+T ■移进归约法 ◆把输入符号一个一个地移进栈里,当栈顶形 成某个产生式的一个候选式时,就把栈顶的这 一 可归约串替换成(归约为)该产生式的左部 符号 ■归约举例 2025/4/2 I 6
2025/4/2 6 归约与移进归约法 ◼归约 ◆推导的逆过程 当A→γ是文法G的一个产生 式,且α、β∈V*,则αγβ能直接归 约到αAβ ◆例如 E+T==>E+T*F,那么E+T*F可以归约到E+T ◼移进归约法 ◆把输入符号一个一个地移进栈里,当栈顶形 成某个产生式的一个候选式时,就把栈顶的这 一可归约串替换成(归约为)该产生式的左部 符号 ◼归约举例

例文法G[s】输入串为:abbcde 移进归约法举例 S-aAcBe最右推导:S=>aAcBe=>aA@e A→Abb ==>aAbcde==>abbcde B→d 说明 步骤栈 输入缓冲区 动作 0# abbcde# 移进a 1 #a bbcde# 栈中串+余留输入串 移进b 2 #ab bcde# 归约A→b =当前句型 3 #aA bcde# 移进b 栈顶可归约串 4 #aAb cde# 归约A→Ab =当前句型的句柄 5 #aA cde# 移进c 6 #aAc de# 移进d 右句型中句 7 #aAcd e# 归约B→d 柄的后面只能出 8 #aAcB e# 移进e 现终结符 9 #aAcBe # 归约S→aAcBe 兰薄理痢柄 10 #S 井 接受 2025/4/2 分析成功结束 可7
2025/4/2 7 例文法G[S] 移进归约法举例 S→aAcBe A→Ab|b B→d 输入串为:abbcde S a A c B e A b d b 步骤 栈 输入缓冲区 动作 0 # abbcde# 1 #a bbcde# 2 #ab bcde# 3 #aA bcde# 4 #aAb cde# 5 #aA cde# 6 #aAc de# 7 #aAcd e# 8 #aAcB e# 9 #aAcBe # 10 #S # 分析成功结束 移进a 移进b 归约 A→b 移进b 归约 A→Ab 移进c 移进d 归约 B→d 移进e 归约S→aAcBe 接受 栈中串+余留输入串 =当前句型 栈顶可归约串 =当前句型的句柄 语法树 分析过程 说明 最右推导:S ==>aAcBe ==>aAcde ==>aAbcde==>abbcde 右句型中句 柄的后面只能出 现终结符 当前句型的句柄 修剪语法树

例文法G[S]: S→aAcBe 语法分析树的生成(输出) A→Abb B→d 产生式序列: S4.S→aAcBe 1.A→b 2.A→Ab 3.B→d 4.S→aAcBe 、2.A→Ab A B |1.A→b 3.B→d a C d e 2025/4/2 节目录 8
2025/4/2 8 语法分析树的生成(输出) a b b c d e A A B S 1.A→b 2.A→Ab 3.B→d 4.S→aAcBe 例文法G[S]: S→aAcBe A→Ab|b B→d 产生式序列: 1.A→b 2.A→Ab 3.B→d 4.S→aAcBe 节目录

规范推导与规范归约 规范推导 最右推导 ■规范句型一如果文法G无二义性, 由规范推 导所得的句型(也称为右句型) ■规范归约一规范推导的逆过程,即最左归约 ■规范归约的实质—在移进过程中, 当发现栈 顶呈现句柄时就用相应产生式的左部符号进行 替换 ■对于规范句型来说,句柄的后面不会出现非 终结符,只能出现终结符 2025/4/2 节目录
2025/4/2 9 规范推导与规范归约 ◼规范推导——最右推导 ◼规范句型——如果文法G无二义性,由规范推 导所得的句型(也称为右句型) ◼规范归约——规范推导的逆过程,即最左归约 ◼规范归约的实质——在移进过程中,当发现栈 顶呈现句柄时就用相应产生式的左部符号进行 替换 ◼对于规范句型来说,句柄的后面不会出现非 终结符,只能出现终结符 节目录

移进归约分析器 输入缓冲区 i火i# 分析栈 移进归约 产生式 E 控制程序 序列 # 栈内容+输入缓冲区内容=#句型# 分析过程中 符号栈 输入串 初态 # w# 终态 #S # 分析成功 2025/4/2 ☒D10
2025/4/2 10 移进归约分析器 i * i # + E # 移进归约 控制程序 产生式 序列 栈内容 + 输入缓冲区内容 = # 句型 # 分析过程中 符号栈 输入串 初态 # w # . . . 终态 #S # 分析成功 分 析 栈 输入缓冲区