SLIDE 6 * 07/16/96 6
SLR parsing
SLR parsing is LR(0) parsing, but with a different reduce rule: For each edge (X: (I,J)) if X is terminal, put shift J at (I,X) if I contains Aà àα . where Aà àα . has rule number n for each terminal x in Follow(A), put reduce reduce n at (I,x) Let’s build an SLR parser for our expression grammar ¡0: ¡Sà àE$ ¡ ¡ ¡1:Eà àE+T ¡ ¡ ¡2:Eà àT ¡ ¡ ¡3:Tà àT*F ¡ ¡ ¡4:Tà àF ¡ ¡ ¡5:Fà à(E) ¡ ¡ ¡6:Fà àid ¡ ¡ ¡ ¡ ¡We ¡need ¡to ¡build ¡the ¡transi5on ¡diagram ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡and ¡follow ¡sets ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡to ¡decide ¡where ¡to ¡put ¡the ¡reduce ¡ac5ons ¡in ¡the ¡SLR ¡table
CS453 Shift-reduce Parsing 21
More realistic example: Expression grammar EàE+T | T TàT*F | F Fà (E) | id SàE$ input: a*(b+c)$ ¡
¡Stack ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡input ¡ ¡ ¡ ¡ ¡ ¡ac+on ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a*(b+c)$ ¡ ¡S ¡
¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡Stack ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡input ¡ ¡ ¡ ¡ac+on ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡T*(E+ ¡ ¡ ¡ ¡ ¡ ¡ ¡c)$ ¡ ¡ ¡ ¡ ¡ ¡ ¡S ¡ ¡ ¡ ¡ ¡T*(E+c ¡ ¡ ¡ ¡ ¡)$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡R: ¡Fàid ¡ ¡ ¡ ¡ ¡T*(E+F ¡ ¡ ¡ ¡ ¡)S ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡R: ¡TàF ¡ ¡ ¡ ¡ ¡T*(E+T ¡ ¡ ¡ ¡ ¡)$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡R: ¡EàE+T ¡ ¡ ¡ ¡ ¡T*(E ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡)$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡S ¡ ¡ ¡ ¡ ¡T*(E) ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡R: ¡Fà(E) ¡ ¡ ¡ ¡ ¡T*F ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡R: ¡TàT*F ¡ ¡ ¡ ¡ ¡T ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡R: ¡Eà àT ¡ ¡ ¡ ¡ ¡E ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡accept ¡
SàE$àT$àT*F$àT*(E)$àT*(E+T)$àT*(E+F)$à ¡T*(E+id)$àT*(T+id)$à ¡ ¡ T*(F+id)$àT*(id+id)$à ¡F*(id+id)$àid*(id+id)$ ¡ Rightmost ¡deriva3on ¡in ¡reverse ¡
¡ ¡ ¡a ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡*(b+c)$ ¡ ¡ ¡ ¡R: ¡Fàid ¡ ¡ ¡ ¡F ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡*(b+c)$ ¡ ¡ ¡ ¡R: ¡TàF ¡ ¡ ¡ ¡T ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡*(b+c)$ ¡ ¡ ¡ ¡S ¡ ¡ ¡ ¡T* ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡(b+c)$ ¡ ¡ ¡ ¡ ¡ ¡S ¡ ¡ ¡ ¡T*( ¡ ¡ ¡ ¡ ¡ ¡ ¡b+c)$ ¡ ¡ ¡ ¡ ¡ ¡ ¡S ¡ ¡ ¡ ¡T*(b ¡ ¡ ¡ ¡ ¡+c)$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡R: ¡Fàid ¡ ¡ ¡ ¡T*(F ¡ ¡ ¡ ¡ ¡+c)$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡R: ¡TàF ¡ ¡ ¡ ¡T*(T ¡ ¡ ¡ ¡ ¡+c)$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡R: ¡EàT ¡ ¡ ¡ ¡T*(E ¡ ¡ ¡ ¡ ¡+c)$ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡S ¡
CS453 Shift-reduce Parsing 22
¡ ¡ ¡0: ¡Sà àE$ ¡ ¡ ¡1:Eà àE+T ¡ ¡ ¡2:Eà àT ¡ ¡ ¡3:Tà àT*F ¡ ¡ ¡4:Tà àF ¡ ¡ ¡5:Fà à(E) ¡ ¡ ¡6:Fà àid ¡
¡ ¡ ¡ ¡SLR ¡parse ¡table ¡(reduces ¡only ¡for ¡follows) ¡ ¡ ¡ ¡ ¡ State ¡ ¡ ¡ ¡ ¡ ¡id ¡ ¡ ¡ ¡ ¡+ ¡ ¡ ¡ ¡ ¡* ¡ ¡ ¡ ¡ ¡( ¡ ¡ ¡ ¡ ¡) ¡ ¡ ¡ ¡ ¡$ ¡ ¡ ¡ ¡ ¡E ¡ ¡ ¡ ¡ ¡T ¡ ¡ ¡ ¡ ¡F ¡ ¡ ¡ ¡ ¡ ¡ ¡0 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s5 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s4 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡g1 ¡ ¡ ¡g2 ¡ ¡ ¡g3 ¡ ¡ ¡ ¡ ¡1 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s6 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a ¡ ¡ ¡ ¡ ¡2 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r2 ¡ ¡ ¡ ¡s7 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r2 ¡ ¡ ¡r2 ¡ ¡ ¡ ¡ ¡ ¡3 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r4 ¡ ¡ ¡ ¡r4 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r4 ¡ ¡ ¡r4 ¡ ¡ ¡ ¡ ¡4 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s5 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s4 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡g8 ¡ ¡ ¡g2 ¡ ¡ ¡g3 ¡ ¡ ¡ ¡ ¡5 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r6 ¡ ¡ ¡ ¡r6 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r6 ¡ ¡ ¡r6 ¡ ¡ ¡ ¡ ¡6 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s5 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s4 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡g9 ¡ ¡ ¡g3 ¡ ¡ ¡ ¡ ¡7 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s5 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s4 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡g10 ¡ ¡ ¡ ¡ ¡8 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s6 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡s11 ¡ ¡ ¡ ¡ ¡9 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r1 ¡ ¡ ¡ ¡ ¡s7 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r1 ¡ ¡ ¡r1 ¡ ¡ ¡ ¡10 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r3 ¡ ¡ ¡ ¡ ¡r3 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r3 ¡ ¡ ¡r3 ¡ ¡ ¡ ¡11 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r5 ¡ ¡ ¡ ¡ ¡r5 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡r5 ¡ ¡ ¡r5 ¡ Stack ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡input ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ac+on ¡
0 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a*(b+c)$ ¡ ¡ ¡ ¡s5 ¡ 0a5 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡*(b+c)$ ¡ ¡ ¡ ¡r6: ¡Fàid ¡ 0F3 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡*(b+c)$ ¡ ¡ ¡ ¡r4: ¡TàF ¡ 0T2 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡*(b+c)$ ¡ ¡ ¡ ¡s7 ¡ 0T2*7 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡(b+c)$ ¡ ¡ ¡ ¡s4 ¡ 0T2*7(4 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡b+c)$ ¡ ¡ ¡ ¡s5 ¡ 0T3*7(4b5 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡+c)$ ¡ ¡ ¡ ¡r6: ¡Fàid ¡ 0T3*7(4F3 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡+c)$ ¡ ¡ ¡ ¡ ¡r4: ¡TàF ¡ 0T3*7(4T2 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡+c)$ ¡ ¡ ¡ ¡ ¡r2: ¡EàT ¡ 0T3*7(4E8 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡+c)$ ¡ ¡ ¡ ¡ ¡s6 ¡ 0T3*7(4E8+6 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡c)$ ¡ ¡ ¡ ¡s5 ¡ 0T3*7(4E8+6c5 ¡ ¡ ¡ ¡ ¡ ¡ ¡)$ ¡ ¡ ¡ ¡r6: ¡Fàid ¡ 0T3*7(4E8+6F3 ¡ ¡ ¡ ¡ ¡ ¡ ¡)$ ¡ ¡ ¡ ¡r4: ¡TàF ¡ 0T3*7(4E8+6T9 ¡ ¡ ¡ ¡ ¡ ¡ ¡)$ ¡ ¡ ¡ ¡r1: ¡EàE+T ¡ 0T3*7(4E8 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡)$ ¡ ¡ ¡ ¡S11 ¡ 0T3*7(4E8)11 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡$ ¡ ¡ ¡ ¡r5: ¡Fà(E) ¡ 0T3*7F10 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡$ ¡ ¡ ¡ ¡r3: ¡TàT*F ¡ 0T2 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡$ ¡ ¡ ¡ ¡r2: ¡EàT ¡ ¡ 0E1 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡$ ¡ ¡ ¡ ¡a ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
CS453 Shift-reduce Parsing 23