移进归约分析器的四种动作 ■移进一把输入串的一个符号移进栈 ■归约一发现栈顶呈现可归约串,将0个或 多个符号从栈中弹出,将相应产生式左部 的非终结符压入栈 ■接受一宣布最终分析成功 ■出错一发现栈顶内容与输入串相悖,分 析工作无法正常进行,此时需要调用出错 处理程序进行诊察和校正,并对栈顶内容 和输入符号进行调整 2025/4/2 刁16
2025/4/2 16 移进归约分析器的四种动作 ◼移进——把输入串的一个符号移进栈 ◼归约——发现栈顶呈现可归约串,将0个或 多个符号从栈中弹出,将相应产生式左部 的非终结符压入栈 ◼接受——宣布最终分析成功 ◼出错——发现栈顶内容与输入串相悖,分 析工作无法正常进行,此时需要调用出错 处理程序进行诊察和校正,并对栈顶内容 和输入符号进行调整
i1*i2+is的分析 步骤栈 输入缓冲区 动作 例文法GE] 0# i1*i2+i3# 预备 E→E+TT 1 #i1 *i2+i3# 移进i T→T*FF 2#F *i2+i3# 归约 F→i F→(E)i 3 #T *i2+i3# 归约 T→F 4 #T* E i2+i3# 移进 5 #T*i2 +i3# ig 分析过程中所用 6 #T*F +i3# 约约 F→i 产生式序列即可 7 #T +i3# T→T*F 8 #E +i3# 约 E→T 表示语法分析的 9 #E+ i3# 移进 输出语法树 10 #E+i3 # 移进 is 11 #E+F 井 归约 F→i 12 #E+T # 归约 T→F 13 #E 井 归约E→E+T 14 接受 2025/4/2 D17
2025/4/2 17 i1*i2+i3的分析 例 文法G[E] E→E+T|T T→T*F|F F→(E)|i 步骤 栈 输入缓冲区 动作 0 # i1*i2+i3# 1 #i1 *i2+i3# 2 #F *i2+i3# 3 #T *i2+i3# 4 #T* i2+i3# 5 #T*i2 +i3# 6 #T*F +i3# 7 #T +i3# 8 #E +i3# 9 #E+ i3# 10 #E+i3 # 预备 移进 i1 归约 F→i 归约 T→F 移进 * 移进 i2 归约 F→i 归约 T→T*F 归约 E→T 移进 + 移进 i3 11 #E+F # 12 #E+T # 13 #E # 14 归约 F→i 归约 T→F 归约 E→E+T 接受 E E + T F T * F T F i2 i3 i1 分析过程中所用 产生式序列即可 表示语法分析的 输出语法树