1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
| ================基本文法如下================= G->A A->V=E E->E+T E->E-T E->T T->T*F T->T/F T->F F->(E) F->i V->i ================文法拓展如下================= G->.A A->.V=E E->.E+T E->.E-T E->.T T->.T*F T->.T/F T->.F F->.(E) F->.i V->.i ================项目集规范族如下================= I0: V->.i G->.A A->.V=E 状态0--A-->状态1 状态0--V-->状态3 状态0--i-->状态2
I1: G->A. 该状态为终端结点
I2: V->i. 该状态为终端结点
I3: A->V.=E 状态3--=-->状态4
I4: A->V=.E E->.E+T T->.T*F E->.E-T T->.T/F T->.F F->.(E) E->.T F->.i 状态4--T-->状态9 状态4--E-->状态5 状态4--F-->状态6 状态4--(-->状态7 状态4--i-->状态8
I5: A->V=E. E->E.-T E->E.+T 状态5--+-->状态10 状态5----->状态11
I6: T->F. 该状态为终端结点
I7: E->.E+T T->.T*F E->.E-T T->.T/F T->.F F->.(E) F->(.E) E->.T F->.i 状态7--T-->状态9 状态7--E-->状态12 状态7--F-->状态6 状态7--(-->状态7 状态7--i-->状态8
I8: F->i. 该状态为终端结点
I9: T->T./F E->T. T->T.*F 状态9--*-->状态13 状态9--/-->状态14
I10: T->.T*F E->E+.T T->.T/F T->.F F->.(E) F->.i 状态10--T-->状态15 状态10--F-->状态6 状态10--(-->状态7 状态10--i-->状态8
I11: T->.T*F E->E-.T T->.T/F T->.F F->.(E) F->.i 状态11--T-->状态16 状态11--F-->状态6 状态11--(-->状态7 状态11--i-->状态8
I12: F->(E.) E->E.-T E->E.+T 状态12--)-->状态17 状态12--+-->状态10 状态12----->状态11
I13: T->T*.F F->.(E) F->.i 状态13--F-->状态18 状态13--(-->状态7 状态13--i-->状态8
I14: F->.(E) F->.i T->T/.F 状态14--F-->状态19 状态14--(-->状态7 状态14--i-->状态8
I15: T->T./F E->E+T. T->T.*F 状态15--*-->状态13 状态15--/-->状态14
I16: T->T./F E->E-T. T->T.*F 状态16--*-->状态13 状态16--/-->状态14
I17: F->(E). 该状态为终端结点
I18: T->T*F. 该状态为终端结点
I19: T->T/F. 该状态为终端结点
A→V=E E→E+T|E-T|T T→T*F|T/F|F F→(E)|i V→i ================FIRST集如下================= F->i:[i] E->E-T:[(, i] T->T*F:[(, i] V->i:[i] T->F:[(, i] T->T/F:[(, i] G->A:[i] E->E+T:[(, i] A->V=E:[i] E->T:[(, i] F->(E):[(] ================FOLLOW集如下================= A:# T:# ) * + - / E:# ) + - V:= F:# ) * + - / G:# ================SLR(1)分析表如下================= ACTION GOTO ( ) i * + = - / # | A T E V F G 0 s2 | 1 3 1 acc | 2 r10 | 3 s4 | 4 s7 s8 | 9 5 6 5 s10 s11 r1 | 6 r7 r7 r7 r7 r7 r7 | 7 s7 s8 | 9 12 6 8 r9 r9 r9 r9 r9 r9 | 9 r4 s13 r4 r4 s14 r4 | 10 s7 s8 | 15 6 11 s7 s8 | 16 6 12 s17 s10 s11 | 13 s7 s8 | 18 14 s7 s8 | 19 15 r2 s13 r2 r2 s14 r2 | 16 r3 s13 r3 r3 s14 r3 | 17 r8 r8 r8 r8 r8 r8 | 18 r5 r5 r5 r5 r5 r5 | 19 r6 r6 r6 r6 r6 r6 | ================待分析的句子================= x=a+b*(c-d)/2 ================分析过程如下================= 状态栈:[0] 符号栈:[#] 输入流:x=a+b*(c-d)/2# 产生式: 状态栈:[0, 2] 符号栈:[#, x] 输入流:=a+b*(c-d)/2# 产生式: 状态栈:[0, 3] 符号栈:[#, V] 输入流:=a+b*(c-d)/2# 产生式:V->i 状态栈:[0, 3, 4] 符号栈:[#, V, =] 输入流:a+b*(c-d)/2# 产生式: 状态栈:[0, 3, 4, 8] 符号栈:[#, V, =, a] 输入流:+b*(c-d)/2# 产生式: 状态栈:[0, 3, 4, 6] 符号栈:[#, V, =, F] 输入流:+b*(c-d)/2# 产生式:F->i 状态栈:[0, 3, 4, 9] 符号栈:[#, V, =, T] 输入流:+b*(c-d)/2# 产生式:T->F 状态栈:[0, 3, 4, 5] 符号栈:[#, V, =, E] 输入流:+b*(c-d)/2# 产生式:E->T 状态栈:[0, 3, 4, 5, 10] 符号栈:[#, V, =, E, +] 输入流:b*(c-d)/2# 产生式: 状态栈:[0, 3, 4, 5, 10, 8] 符号栈:[#, V, =, E, +, b] 输入流:*(c-d)/2# 产生式: 状态栈:[0, 3, 4, 5, 10, 6] 符号栈:[#, V, =, E, +, F] 输入流:*(c-d)/2# 产生式:F->i 状态栈:[0, 3, 4, 5, 10, 15] 符号栈:[#, V, =, E, +, T] 输入流:*(c-d)/2# 产生式:T->F 状态栈:[0, 3, 4, 5, 10, 15, 13] 符号栈:[#, V, =, E, +, T, *] 输入流:(c-d)/2# 产生式: 状态栈:[0, 3, 4, 5, 10, 15, 13, 7] 符号栈:[#, V, =, E, +, T, *, (] 输入流:c-d)/2# 产生式: 状态栈:[0, 3, 4, 5, 10, 15, 13, 7, 8] 符号栈:[#, V, =, E, +, T, *, (, c] 输入流:-d)/2# 产生式: 状态栈:[0, 3, 4, 5, 10, 15, 13, 7, 6] 符号栈:[#, V, =, E, +, T, *, (, F] 输入流:-d)/2# 产生式:F->i 状态栈:[0, 3, 4, 5, 10, 15, 13, 7, 9] 符号栈:[#, V, =, E, +, T, *, (, T] 输入流:-d)/2# 产生式:T->F 状态栈:[0, 3, 4, 5, 10, 15, 13, 7, 12] 符号栈:[#, V, =, E, +, T, *, (, E] 输入流:-d)/2# 产生式:E->T 状态栈:[0, 3, 4, 5, 10, 15, 13, 7, 12, 11] 符号栈:[#, V, =, E, +, T, *, (, E, -] 输入流:d)/2# 产生式: 状态栈:[0, 3, 4, 5, 10, 15, 13, 7, 12, 11, 8] 符号栈:[#, V, =, E, +, T, *, (, E, -, d] 输入流:)/2# 产生式: 状态栈:[0, 3, 4, 5, 10, 15, 13, 7, 12, 11, 6] 符号栈:[#, V, =, E, +, T, *, (, E, -, F] 输入流:)/2# 产生式:F->i 状态栈:[0, 3, 4, 5, 10, 15, 13, 7, 12, 11, 16] 符号栈:[#, V, =, E, +, T, *, (, E, -, T] 输入流:)/2# 产生式:T->F 状态栈:[0, 3, 4, 5, 10, 15, 13, 7, 12] 符号栈:[#, V, =, E, +, T, *, (, E] 输入流:)/2# 产生式:E->E-T 产生三地址指令:T1:=c-d 状态栈:[0, 3, 4, 5, 10, 15, 13, 7, 12, 17] 符号栈:[#, V, =, E, +, T, *, (, E, )] 输入流:/2# 产生式: 状态栈:[0, 3, 4, 5, 10, 15, 13, 18] 符号栈:[#, V, =, E, +, T, *, F] 输入流:/2# 产生式:F->(E) 状态栈:[0, 3, 4, 5, 10, 15] 符号栈:[#, V, =, E, +, T] 输入流:/2# 产生式:T->T*F 产生三地址指令:T2:=b*T1 状态栈:[0, 3, 4, 5, 10, 15, 14] 符号栈:[#, V, =, E, +, T, /] 输入流:2# 产生式: 状态栈:[0, 3, 4, 5, 10, 15, 14, 8] 符号栈:[#, V, =, E, +, T, /, 2] 输入流:# 产生式: 状态栈:[0, 3, 4, 5, 10, 15, 14, 19] 符号栈:[#, V, =, E, +, T, /, F] 输入流:# 产生式:F->i 状态栈:[0, 3, 4, 5, 10, 15] 符号栈:[#, V, =, E, +, T] 输入流:# 产生式:T->T/F 产生三地址指令:T3:=T2/2 状态栈:[0, 3, 4, 5] 符号栈:[#, V, =, E] 输入流:# 产生式:E->E+T 产生三地址指令:T4:=a+T3 状态栈:[0, 1] 符号栈:[#, A] 输入流:# 产生式:A->V=E 产生三地址指令:x:=T4 分析成功!!! ================生成的三地址指令如下================= T1:=c-d T2:=b*T1 T3:=T2/2 T4:=a+T3 x:=T4
|