■分析算法 初始,状态S0位于栈底(栈顶); 根据当前栈顶状态S和当前输入符号a,查 action表, 由 action[s, a]决定分析动作: s一输入符a移入栈顶top(push旦);状态移入栈 顶top( push i)。 「一按第个产生式(A>β)进行归约,首先将从栈 页top往栈中的|B个状态和β个符号(计2×B个) 弹出分析栈;设此时栈顶状态为T,再将符号A和状 态S= GOTOIT A]依次移入分析栈(S'在栈顶top) acc输入串被接受,分析成功! error-输入串有错,调错误恢复程序 2021/2/2 《编译原理与技术》讲义
2021/2/2 《编译原理与技术》讲义 26 分析算法 初始,状态S0位于栈底(栈顶); 根据当前栈顶状态S和当前输入符号a,查action表, 由action[S,a]决定分析动作: ∙ si-输入符a移入栈顶top(push a );状态i移入栈 顶top(push i)。 ∙ rj -按第j个产生式(A→)进行归约,首先将从栈 顶top往栈中的||个状态和||个符号(计2×||个) 弹出分析栈;设此时栈顶状态为T,再将符号A和状 态S’=GOTO[T,A] 依次移入分析栈(S’在栈顶top) ∙ acc - 输入串被接受,分析成功! ∙ error - 输入串有错,调错误恢复程序
e9.21表达式文法G2的LR分析表 文法G2 (1)E→>E+T (2)ET (3T>T*F (4)TF (5)F→(E) (6)F→yid 2021/2/2 《编译原理与技术》讲义 27
2021/2/2 《编译原理与技术》讲义 27 e.g.21 表达式文法G2的LR分析表 文法G2: (1)E→E + T (2)E→T (3)T→T * F (4)T→F (5)F→( E ) (6)F→ id
e921表达式文法G2的LR分析表 状态 action goto id+ S E TF 0s5 S4 123 S6 acc r2|s7 2r2 23456 [4[4 4r4 S5 S4 823 r66r66 S5 S4 93 2021/2/2 《编译原理与技术》讲义 28
2021/2/2 《编译原理与技术》讲义 28 e.g.21 表达式文法G2的LR分析表 状 态 action goto id + * ( ) $ E T F 0 s5 s4 1 2 3 1 s6 acc 2 r2 s7 r2 r2 3 r4 r4 r4 r4 4 s5 s4 8 2 3 5 r6 r6 r6 r6 6 s5 s4 9 3
e.g21表达式文法G2的LR分析表(续) 状态 action goto id+ SETF S5 S4 10 789 S6 s11 r1 s7 10 35 r3 135 11 r5 35 2021/2/2 《编译原理与技术》讲义 29
2021/2/2 《编译原理与技术》讲义 29 e.g.21 表达式文法G2的LR分析表(续) 状 态 action goto id + * ( ) $ E T F 7 s5 s4 10 8 s6 s11 9 r1 s7 r1 r1 10 r3 r3 r3 r3 11 r5 r5 r5 r5
eg.21id*(idid)$的移进-归约分析过程 分析栈 输入串 输出 0 id*(id+id)$ Oid 5 (d+d)$ S5:移进id 0F3 (id+id)S r6: F->id 0T2 (id+id)S r4:T→F 0T2*7 (id+id)$ s7:移进* 0T2*7(4 id+id)s s4:移进( 0T2*7(4d5+d)$ s5:移进id 2021/2/2 《编译原理与技术》讲义
2021/2/2 《编译原理与技术》讲义 30 e.g.21 id*(id+id)$的移进-归约分析过程 分析栈 输入串 输出 0 id*(id+id)$ 0id5 *(id+id)$ s5:移进id 0F3 *(id+id)$ r6:F→id 0T2 *(id+id)$ r4:T→F 0T2*7 (id+id)$ s7:移进* 0T2*7(4 id+id)$ s4:移进( 0T2*7(4id5 +id)$ s5:移进id