ACTION GOTO a b d 井 S A B 0 S2 1 1 acc 23 S4 S5 S6 4 r2 r2 2 r2 r2 2 S8 6 r3 r3 r3 r3 r3 r3 7 S9 r4 仅 9 rl rl r4 4 rl
ACTION GOTO a c e b d # S A B 0 S2 1 1 acc 2 S4 3 3 S5 S6 4 r2 r2 r2 r2 r2 r2 5 S8 7 6 r3 r3 r3 r3 r3 r3 7 S9 8 r4 r4 r4 r4 r4 r4 9 r1 r1 r1 r1 r1 r1
LR分析算法 置ip指向输入串w的第一个符号 令S为栈顶状态 a是ip指向的符号 重复begin if ACTION[S,a]-Si then begin PUSH j,a(进栈) p前进(指向下一输入符号) end - else if ACTION[S,a=可(第j条产生式为A→B)
LR分析算法 置ip指向输入串w的第一个符号 – 令S为栈顶状态 – a是ip指向的符号 – 重复 begin – if ACTION[S,a]=Sj – then begin PUSH j,a(进栈) – ip 前进(指向下一输入符号) – end – else if ACTION[S,a]=rj (第j条产生式为A→)
LR分析程序 then begin popB|项 令当前栈顶状态为S push GOTO[S',A]和A(进栈) x end else if ACTION[s,a]=acc then return(成功) else error end.重复
LR分析程序 » then begin pop || 项 令当前栈顶状态为S’ push GOTO[S’,A]和A(进栈) » end » else if ACTION[s,a]=acc then return (成功) else error – end.重复
LR分析程序 例: G[S]:S-→aAcBe[l] A→b[2] A-→Ab[3] B→d[4] w=abbcde#
LR分析程序 例: – G[S]: S →a A c B e [1] – A →b[2] – A →Ab[3] – B →d[4] w=abbcde#
Step states. Syms. The rest of input action goto 1 0 # abbcde# s2 2 02 #a bbcde# s4 3 024 #ab bcde# r2 goto(2,A) 4 023 #aA s6 5 0236 #aAb cde# r3 6 023 #aA S5 7 0235 #aAc de# s8 8 02358#aAcd e# r4 9 02357 #aAcB s9 10 023579#aAcBe# rl 11 01 #S acc
Step states. Syms. The rest of input action goto 1 0 # abbcde# s2 2 02 #a bbcde# s4 3 024 #ab bcde# r2 goto(2,A) 4 023 #aA s6 5 0236 #aAb cde# r3 6 023 #aA s5 7 0235 #aAc de# s8 8 02358 #aAcd e# r4 9 02357 #aAcB s9 10 023579 #aAcBe # r1 11 01 #S acc