1
1
from pprint import pprint
2
- from sys import exit
3
- def add ( listA , x ):
4
- if x not in listA : listA . append ( x )
2
+ from random import randint
3
+ from threading import Thread , Lock
4
+ mutex = Lock ( )
5
5
def import_grammar (fileHandle ):
6
6
G ,T ,Nt = [],[],[]
7
7
for lines in fileHandle :
@@ -18,33 +18,8 @@ def import_grammar(fileHandle):
18
18
if production not in G : G .append ((production [0 ],production [1 ]))
19
19
T .append ('$' )
20
20
return G ,T ,Nt
21
- def first_set (G ,T ,Nt ):
22
- firstA = {}
23
- tempA = {}
24
- for NonT in Nt : firstA [NonT ] = []
25
- while True :
26
- for NonT in firstA :
27
- tempA [NonT ] = [i for i in firstA [NonT ]]
28
- for i in range (len (G )):
29
- if G [i ][1 ] == '' : add (tempA [G [i ][0 ]],'' )
30
- elif G [i ][1 ][0 ] in Nt :
31
- if '' not in firstA [G [i ][1 ][0 ]]:
32
- for k in firstA [G [i ][1 ][0 ]]: add (tempA [G [i ][0 ]],k )
33
- else :
34
- listA = [ k for k in firstA [G [i ][1 ][0 ]] ]
35
- r = listA .index ('' )
36
- del listA [r ]
37
- for k in listA : add (tempA [G [i ][0 ]],k )
38
- add (tempA [G [i ][0 ]],'' )
39
- elif G [i ][1 ][0 ] in T : add (tempA [G [i ][0 ]],G [i ][1 ][0 ])
40
- flag = True
41
- for NonT in Nt : flag = flag and (tempA [NonT ] == firstA [NonT ])
42
- if flag : break
43
- for NonT in Nt : firstA [NonT ] = [i for i in tempA [NonT ]]
44
- return firstA
45
- def closure (I ,G ,T ,Nt ):
21
+ def closure (I ,G ,Nt ):
46
22
J = [p for p in I ]
47
- first_set_list = first_set (G ,T ,Nt )
48
23
while True :
49
24
J1 = [x for x in J ]
50
25
for x in J1 :
@@ -55,23 +30,18 @@ def closure(I,G,T,Nt):
55
30
if handle [k + 1 ] in Nt :
56
31
for p in G :
57
32
beta = '' .join (handle [m ] for m in range (k + 2 ,len (handle )))
58
- b1 = list (beta + a )[0 ]
33
+ b = list (beta + a )[0 ]
59
34
if p [0 ] == handle [k + 1 ]:
60
- if b1 in T :
61
- new_p = (p [0 ],'.' + p [1 ],b1 )
62
- if new_p not in J1 : J1 .append (new_p )
63
- elif b1 in Nt :
64
- for b in first_set_list [b1 ]:
65
- new_p = (p [0 ],'.' + p [1 ],b if b != '' else '$' )
66
- if new_p not in J1 : J1 .append (new_p )
35
+ new_p = (p [0 ],'.' + p [1 ],b )
36
+ if new_p not in J1 : J1 .append (new_p )
67
37
flag = True
68
38
for x in J1 :
69
39
if x not in J :
70
40
flag = False
71
41
J .append (x )
72
42
if flag : break
73
43
return J
74
- def goto (I ,G ,X ,T , Nt ):
44
+ def goto (I ,G ,X ,Nt ):
75
45
W = []
76
46
for x in I :
77
47
handle = list (x [1 ])
@@ -81,17 +51,17 @@ def goto(I,G,X,T,Nt):
81
51
S1 = '' .join ([handle [i ] for i in range (k )])
82
52
S2 = '' .join ([handle [i ] for i in range (k + 2 ,len (handle ))])
83
53
W .append ((x [0 ],S1 + X + '.' + S2 ,x [2 ]))
84
- return closure (W ,G ,T , Nt )
54
+ return closure (W ,G ,Nt )
85
55
def items (G ,T ,Nt ):
86
- C = [ closure ([(G [0 ][0 ],'.' + G [0 ][1 ],'$' )],G ,T , Nt ) ]
56
+ C = [ closure ([(G [0 ][0 ],'.' + G [0 ][1 ],'$' )],G ,Nt ) ]
87
57
action = {}
88
58
goto_k = {}
89
59
reduction_states = {}
90
60
while True :
91
61
C1 = [ I for I in C ]
92
62
for I in C1 :
93
63
for X in T :
94
- goto_list = goto (I ,G ,X ,T , Nt )
64
+ goto_list = goto (I ,G ,X ,Nt )
95
65
if len (goto_list )!= 0 and goto_list not in C1 :
96
66
C1 .append (goto_list )
97
67
if C1 .index (I ) not in action : action [C1 .index (I )] = {}
@@ -103,7 +73,7 @@ def items(G,T,Nt):
103
73
action [C1 .index (I )][X ] = C1 .index (goto_list )
104
74
for I in C1 :
105
75
for X in Nt :
106
- goto_list = goto (I ,G ,X ,T , Nt )
76
+ goto_list = goto (I ,G ,X ,Nt )
107
77
if len (goto_list )!= 0 and goto_list not in C1 :
108
78
C1 .append (goto_list )
109
79
if C1 .index (I ) not in goto_k : goto_k [C1 .index (I )] = {}
@@ -134,12 +104,14 @@ def items(G,T,Nt):
134
104
if reduction_states [x ]['$' ] == G [0 ]:
135
105
accept_state = x
136
106
break
137
- return action ,goto_k ,reduction_states ,accept_state
107
+ return C , action ,goto_k ,reduction_states ,accept_state
138
108
def driver ():
139
- fileHandle = open ('grammar14 .txt' )
109
+ fileHandle = open ('grammarinput3 .txt' )
140
110
G ,T ,Nt = import_grammar (fileHandle )
141
111
print T ,Nt
142
- action_list ,goto_list ,reduction_states ,accept_state = items (G ,T ,Nt )
112
+ C ,action_list ,goto_list ,reduction_states ,accept_state = items (G ,T ,Nt )
113
+ print 'Canonical states'
114
+ for i in range (len (C )): print i ,C [i ]
143
115
print 'Action list'
144
116
pprint (action_list )
145
117
print 'Goto list'
@@ -148,28 +120,358 @@ def driver():
148
120
pprint (reduction_states )
149
121
print 'Accept state' ,accept_state
150
122
stack = [0 ]
123
+ symbol_stack = ['$' ]
151
124
input_str = raw_input ('Enter some string ' )+ '$'
152
125
i ,top = 0 ,0
153
126
# LR(1) AUTOMATON PARSING
154
- while True :
155
- s = stack [top ]
156
- try :
157
- print s ,stack ,input_str [i ] if i != len (input_str ) else 'Finish' ,
158
- if s == accept_state and input_str [i ]== '$' :
159
- print 'accept'
127
+ def automatonThread (symbol_stack ,stack ,input_str ,i ,top ):
128
+ global mutex
129
+ mutex .acquire ()
130
+ print 'STATE' ,'INPUT' ,'SYMBOL_STACK' ,'ACTION'
131
+ while True :
132
+ print 'Input string' ,input_str
133
+ s = stack [top ]
134
+ try :
135
+ print s ,input_str [i ] if i != len (input_str ) else 'Finish' ,symbol_stack ,
136
+ if s == accept_state :
137
+ print 'accept'
138
+ mutex .release ()
139
+ break
140
+ elif len (reduction_states [s ]) != 0 and input_str [i ] in reduction_states [s ]:
141
+ A ,beta = reduction_states [s ][input_str [i ]]
142
+ print 'reduce' ,A ,'->' ,beta
143
+ for j in range (len (beta )):
144
+ del stack [top ]
145
+ del symbol_stack [top ]
146
+ t = stack [top ]
147
+ stack .insert (top ,goto_list [t ][A ])
148
+ symbol_stack .insert (top ,A )
149
+ else :
150
+ a = input_str [i ]
151
+ stack .insert (top ,action_list [s ][a ])
152
+ symbol_stack .insert (top ,a )
153
+ print 'shift' ,action_list [s ][a ]
154
+ i = i + 1
155
+ except :
156
+ print '\n Syntax error detected'
157
+ print 'Expected any of the following'
158
+ errors = []
159
+ if s in action_list :
160
+ for prod in action_list [s ]: errors .append (prod )
161
+ elif s in reduction_states :
162
+ for prod in reduction_states [s ]: errors .append (prod )
163
+ for j in range (len (errors )): print j + 1 ,')' ,errors [j ] if errors [j ] != '$' else 'End of line'
164
+ threadList = [None for j in range (len (errors ))]
165
+ print 'Got' ,input_str [i ],'at position' ,i
166
+ mutex .release ()
167
+ for k in range (len (errors )):
168
+ r = errors [k ]
169
+ e = input_str [i ]
170
+ buffer_str = '' .join (input_str [j ] for j in range (i ))+ r + '' .join (input_str [j ] for j in range (i + 1 ,len (input_str )))
171
+ if i == len (buffer_str ) - 1 and e == '$' : buffer_str = buffer_str + '$'
172
+ print 'Current adjusted input' ,buffer_str
173
+ threadList [k ] = Thread (target = automatonThread ,args = (symbol_stack ,stack ,buffer_str ,i ,top ,))
174
+ for k in range (len (errors )): threadList [k ].start ()
175
+ for k in range (len (errors )): threadList [k ].join ()
160
176
break
161
- elif len (reduction_states [s ]) != 0 and input_str [i ] in reduction_states [s ]:
162
- A ,beta = reduction_states [s ][input_str [i ]]
163
- print 'reduce' ,A ,'->' ,beta
164
- for j in range (len (beta )): del stack [top ]
165
- t = stack [top ]
166
- stack .insert (top ,goto_list [t ][A ])
167
- else :
168
- a = input_str [i ]
169
- stack .insert (top ,action_list [s ][a ])
170
- print 'shift' ,action_list [s ][a ]
171
- i = i + 1
172
- except :
173
- print 'Syntax error'
174
- break
175
- driver ()
177
+ automatonThread (symbol_stack ,stack ,input_str ,i ,top )
178
+ driver ()
179
+ # The output of the program
180
+ # ['a', 'b', '$'] ['G', 'S']
181
+ # Canonical states
182
+ # 0 [('G', '.S', '$'), ('S', '.abS', '$'), ('S', '.baS', '$'), ('S', '.aaSbbS', '$'), ('S', '.bbSaaS', '$'), ('S', '.', '$')]
183
+ # 1 [('S', 'a.bS', '$'), ('S', 'a.aSbbS', '$')]
184
+ # 2 [('S', 'b.aS', '$'), ('S', 'b.bSaaS', '$')]
185
+ # 3 [('S', 'aa.SbbS', '$'), ('S', '.abS', 'b'), ('S', '.baS', 'b'), ('S', '.aaSbbS', 'b'), ('S', '.bbSaaS', 'b'), ('S', '.', 'b')]
186
+ # 4 [('S', 'ab.S', '$'), ('S', '.abS', '$'), ('S', '.baS', '$'), ('S', '.aaSbbS', '$'), ('S', '.bbSaaS', '$'), ('S', '.', '$')]
187
+ # 5 [('S', 'ba.S', '$'), ('S', '.abS', '$'), ('S', '.baS', '$'), ('S', '.aaSbbS', '$'), ('S', '.bbSaaS', '$'), ('S', '.', '$')]
188
+ # 6 [('S', 'bb.SaaS', '$'), ('S', '.abS', 'a'), ('S', '.baS', 'a'), ('S', '.aaSbbS', 'a'), ('S', '.bbSaaS', 'a'), ('S', '.', 'a')]
189
+ # 7 [('S', 'a.bS', 'b'), ('S', 'a.aSbbS', 'b')]
190
+ # 8 [('S', 'b.aS', 'b'), ('S', 'b.bSaaS', 'b')]
191
+ # 9 [('S', 'a.bS', 'a'), ('S', 'a.aSbbS', 'a')]
192
+ # 10 [('S', 'b.aS', 'a'), ('S', 'b.bSaaS', 'a')]
193
+ # 11 [('S', 'aa.SbbS', 'b'), ('S', '.abS', 'b'), ('S', '.baS', 'b'), ('S', '.aaSbbS', 'b'), ('S', '.bbSaaS', 'b'), ('S', '.', 'b')]
194
+ # 12 [('S', 'ab.S', 'b'), ('S', '.abS', 'b'), ('S', '.baS', 'b'), ('S', '.aaSbbS', 'b'), ('S', '.bbSaaS', 'b'), ('S', '.', 'b')]
195
+ # 13 [('S', 'ba.S', 'b'), ('S', '.abS', 'b'), ('S', '.baS', 'b'), ('S', '.aaSbbS', 'b'), ('S', '.bbSaaS', 'b'), ('S', '.', 'b')]
196
+ # 14 [('S', 'bb.SaaS', 'b'), ('S', '.abS', 'a'), ('S', '.baS', 'a'), ('S', '.aaSbbS', 'a'), ('S', '.bbSaaS', 'a'), ('S', '.', 'a')]
197
+ # 15 [('S', 'aa.SbbS', 'a'), ('S', '.abS', 'b'), ('S', '.baS', 'b'), ('S', '.aaSbbS', 'b'), ('S', '.bbSaaS', 'b'), ('S', '.', 'b')]
198
+ # 16 [('S', 'ab.S', 'a'), ('S', '.abS', 'a'), ('S', '.baS', 'a'), ('S', '.aaSbbS', 'a'), ('S', '.bbSaaS', 'a'), ('S', '.', 'a')]
199
+ # 17 [('S', 'ba.S', 'a'), ('S', '.abS', 'a'), ('S', '.baS', 'a'), ('S', '.aaSbbS', 'a'), ('S', '.bbSaaS', 'a'), ('S', '.', 'a')]
200
+ # 18 [('S', 'bb.SaaS', 'a'), ('S', '.abS', 'a'), ('S', '.baS', 'a'), ('S', '.aaSbbS', 'a'), ('S', '.bbSaaS', 'a'), ('S', '.', 'a')]
201
+ # 19 [('G', 'S.', '$')]
202
+ # 20 [('S', 'aaS.bbS', '$')]
203
+ # 21 [('S', 'abS.', '$')]
204
+ # 22 [('S', 'baS.', '$')]
205
+ # 23 [('S', 'bbS.aaS', '$')]
206
+ # 24 [('S', 'aaS.bbS', 'b')]
207
+ # 25 [('S', 'abS.', 'b')]
208
+ # 26 [('S', 'baS.', 'b')]
209
+ # 27 [('S', 'bbS.aaS', 'b')]
210
+ # 28 [('S', 'aaS.bbS', 'a')]
211
+ # 29 [('S', 'abS.', 'a')]
212
+ # 30 [('S', 'baS.', 'a')]
213
+ # 31 [('S', 'bbS.aaS', 'a')]
214
+ # 32 [('S', 'aaSb.bS', '$')]
215
+ # 33 [('S', 'bbSa.aS', '$')]
216
+ # 34 [('S', 'aaSb.bS', 'b')]
217
+ # 35 [('S', 'bbSa.aS', 'b')]
218
+ # 36 [('S', 'aaSb.bS', 'a')]
219
+ # 37 [('S', 'bbSa.aS', 'a')]
220
+ # 38 [('S', 'aaSbb.S', '$'), ('S', '.abS', '$'), ('S', '.baS', '$'), ('S', '.aaSbbS', '$'), ('S', '.bbSaaS', '$'), ('S', '.', '$')]
221
+ # 39 [('S', 'bbSaa.S', '$'), ('S', '.abS', '$'), ('S', '.baS', '$'), ('S', '.aaSbbS', '$'), ('S', '.bbSaaS', '$'), ('S', '.', '$')]
222
+ # 40 [('S', 'aaSbb.S', 'b'), ('S', '.abS', 'b'), ('S', '.baS', 'b'), ('S', '.aaSbbS', 'b'), ('S', '.bbSaaS', 'b'), ('S', '.', 'b')]
223
+ # 41 [('S', 'bbSaa.S', 'b'), ('S', '.abS', 'b'), ('S', '.baS', 'b'), ('S', '.aaSbbS', 'b'), ('S', '.bbSaaS', 'b'), ('S', '.', 'b')]
224
+ # 42 [('S', 'aaSbb.S', 'a'), ('S', '.abS', 'a'), ('S', '.baS', 'a'), ('S', '.aaSbbS', 'a'), ('S', '.bbSaaS', 'a'), ('S', '.', 'a')]
225
+ # 43 [('S', 'bbSaa.S', 'a'), ('S', '.abS', 'a'), ('S', '.baS', 'a'), ('S', '.aaSbbS', 'a'), ('S', '.bbSaaS', 'a'), ('S', '.', 'a')]
226
+ # 44 [('S', 'aaSbbS.', '$')]
227
+ # 45 [('S', 'bbSaaS.', '$')]
228
+ # 46 [('S', 'aaSbbS.', 'b')]
229
+ # 47 [('S', 'bbSaaS.', 'b')]
230
+ # 48 [('S', 'aaSbbS.', 'a')]
231
+ # 49 [('S', 'bbSaaS.', 'a')]
232
+ # Action list
233
+ # {0: {'a': 1, 'b': 2},
234
+ # 1: {'a': 3, 'b': 4},
235
+ # 2: {'a': 5, 'b': 6},
236
+ # 3: {'a': 7, 'b': 8},
237
+ # 4: {'a': 1, 'b': 2},
238
+ # 5: {'a': 1, 'b': 2},
239
+ # 6: {'a': 9, 'b': 10},
240
+ # 7: {'a': 11, 'b': 12},
241
+ # 8: {'a': 13, 'b': 14},
242
+ # 9: {'a': 15, 'b': 16},
243
+ # 10: {'a': 17, 'b': 18},
244
+ # 11: {'a': 7, 'b': 8},
245
+ # 12: {'a': 7, 'b': 8},
246
+ # 13: {'a': 7, 'b': 8},
247
+ # 14: {'a': 9, 'b': 10},
248
+ # 15: {'a': 7, 'b': 8},
249
+ # 16: {'a': 9, 'b': 10},
250
+ # 17: {'a': 9, 'b': 10},
251
+ # 18: {'a': 9, 'b': 10},
252
+ # 20: {'b': 32},
253
+ # 23: {'a': 33},
254
+ # 24: {'b': 34},
255
+ # 27: {'a': 35},
256
+ # 28: {'b': 36},
257
+ # 31: {'a': 37},
258
+ # 32: {'b': 38},
259
+ # 33: {'a': 39},
260
+ # 34: {'b': 40},
261
+ # 35: {'a': 41},
262
+ # 36: {'b': 42},
263
+ # 37: {'a': 43},
264
+ # 38: {'a': 1, 'b': 2},
265
+ # 39: {'a': 1, 'b': 2},
266
+ # 40: {'a': 7, 'b': 8},
267
+ # 41: {'a': 7, 'b': 8},
268
+ # 42: {'a': 9, 'b': 10},
269
+ # 43: {'a': 9, 'b': 10}}
270
+ # Goto list
271
+ # {0: {'S': 19},
272
+ # 3: {'S': 20},
273
+ # 4: {'S': 21},
274
+ # 5: {'S': 22},
275
+ # 6: {'S': 23},
276
+ # 11: {'S': 24},
277
+ # 12: {'S': 25},
278
+ # 13: {'S': 26},
279
+ # 14: {'S': 27},
280
+ # 15: {'S': 28},
281
+ # 16: {'S': 29},
282
+ # 17: {'S': 30},
283
+ # 18: {'S': 31},
284
+ # 38: {'S': 44},
285
+ # 39: {'S': 45},
286
+ # 40: {'S': 46},
287
+ # 41: {'S': 47},
288
+ # 42: {'S': 48},
289
+ # 43: {'S': 49}}
290
+ # Reduction states
291
+ # {0: {'$': ('S', '')},
292
+ # 1: {},
293
+ # 2: {},
294
+ # 3: {'b': ('S', '')},
295
+ # 4: {'$': ('S', '')},
296
+ # 5: {'$': ('S', '')},
297
+ # 6: {'a': ('S', '')},
298
+ # 7: {},
299
+ # 8: {},
300
+ # 9: {},
301
+ # 10: {},
302
+ # 11: {'b': ('S', '')},
303
+ # 12: {'b': ('S', '')},
304
+ # 13: {'b': ('S', '')},
305
+ # 14: {'a': ('S', '')},
306
+ # 15: {'b': ('S', '')},
307
+ # 16: {'a': ('S', '')},
308
+ # 17: {'a': ('S', '')},
309
+ # 18: {'a': ('S', '')},
310
+ # 19: {'$': ('G', 'S')},
311
+ # 20: {},
312
+ # 21: {'$': ('S', 'abS')},
313
+ # 22: {'$': ('S', 'baS')},
314
+ # 23: {},
315
+ # 24: {},
316
+ # 25: {'b': ('S', 'abS')},
317
+ # 26: {'b': ('S', 'baS')},
318
+ # 27: {},
319
+ # 28: {},
320
+ # 29: {'a': ('S', 'abS')},
321
+ # 30: {'a': ('S', 'baS')},
322
+ # 31: {},
323
+ # 32: {},
324
+ # 33: {},
325
+ # 34: {},
326
+ # 35: {},
327
+ # 36: {},
328
+ # 37: {},
329
+ # 38: {'$': ('S', '')},
330
+ # 39: {'$': ('S', '')},
331
+ # 40: {'b': ('S', '')},
332
+ # 41: {'b': ('S', '')},
333
+ # 42: {'a': ('S', '')},
334
+ # 43: {'a': ('S', '')},
335
+ # 44: {'$': ('S', 'aaSbbS')},
336
+ # 45: {'$': ('S', 'bbSaaS')},
337
+ # 46: {'b': ('S', 'aaSbbS')},
338
+ # 47: {'b': ('S', 'bbSaaS')},
339
+ # 48: {'a': ('S', 'aaSbbS')},
340
+ # 49: {'a': ('S', 'bbSaaS')}}
341
+ # Accept state 19
342
+ # Enter some string aaaabbaaaabb
343
+ # STATE INPUT SYMBOL_STACK ACTION
344
+ # Input string aaaabbaaaabb$
345
+ # 0 a ['$'] shift 1
346
+ # Input string aaaabbaaaabb$
347
+ # 1 a ['a', '$'] shift 3
348
+ # Input string aaaabbaaaabb$
349
+ # 3 a ['a', 'a', '$'] shift 7
350
+ # Input string aaaabbaaaabb$
351
+ # 7 a ['a', 'a', 'a', '$'] shift 11
352
+ # Input string aaaabbaaaabb$
353
+ # 11 b ['a', 'a', 'a', 'a', '$'] reduce S ->
354
+ # Input string aaaabbaaaabb$
355
+ # 24 b ['S', 'a', 'a', 'a', 'a', '$'] shift 34
356
+ # Input string aaaabbaaaabb$
357
+ # 34 b ['b', 'S', 'a', 'a', 'a', 'a', '$'] shift 40
358
+ # Input string aaaabbaaaabb$
359
+ # 40 a ['b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 7
360
+ # Input string aaaabbaaaabb$
361
+ # 7 a ['a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 11
362
+ # Input string aaaabbaaaabb$
363
+ # 11 a ['a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 7
364
+ # Input string aaaabbaaaabb$
365
+ # 7 a ['a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 11
366
+ # Input string aaaabbaaaabb$
367
+ # 11 b ['a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] reduce S ->
368
+ # Input string aaaabbaaaabb$
369
+ # 24 b ['S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 34
370
+ # Input string aaaabbaaaabb$
371
+ # 34 b ['b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 40
372
+ # Input string aaaabbaaaabb$
373
+ # 40 $ ['b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$']
374
+ # Syntax error detected
375
+ # Expected any of the following
376
+ # 1 ) a
377
+ # 2 ) b
378
+ # Got $ at position 12
379
+ # Current adjusted input aaaabbaaaabba$
380
+ # Current adjusted input aaaabbaaaabbb$
381
+ # STATE INPUT SYMBOL_STACK ACTION
382
+ # Input string aaaabbaaaabba$
383
+ # 40 a ['b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 7
384
+ # Input string aaaabbaaaabba$
385
+ # 7 $ ['a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$']
386
+ # Syntax error detected
387
+ # Expected any of the following
388
+ # 1 ) a
389
+ # 2 ) b
390
+ # Got $ at position 13
391
+ # Current adjusted input aaaabbaaaabbaa$
392
+ # Current adjusted input aaaabbaaaabbab$
393
+ # STATE INPUT SYMBOL_STACK ACTION
394
+ # Input string aaaabbaaaabbb$
395
+ # 7 b ['a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 12
396
+ # Input string aaaabbaaaabbb$
397
+ # 12 $ ['b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$']
398
+ # Syntax error detected
399
+ # Expected any of the following
400
+ # 1 ) a
401
+ # 2 ) b
402
+ # Got $ at position 13
403
+ # Current adjusted input aaaabbaaaabbba$
404
+ # STATE INPUT SYMBOL_STACK Current adjusted input aaaabbaaaabbbb$
405
+ # ACTION
406
+ # Input string aaaabbaaaabbaa$
407
+ # 12 a ['b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 7
408
+ # Input string aaaabbaaaabbaa$
409
+ # 7 $ ['a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$']
410
+ # Syntax error detected
411
+ # Expected any of the following
412
+ # 1 ) a
413
+ # 2 ) b
414
+ # Got $ at position 14
415
+ # Current adjusted input aaaabbaaaabbaaa$
416
+ # Current adjusted input aaaabbaaaabbaab$
417
+ # STATE INPUT SYMBOL_STACK ACTION
418
+ # Input string aaaabbaaaabbab$
419
+ # 7 b ['a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 12
420
+ # Input string aaaabbaaaabbab$
421
+ # 12 $ ['b', 'a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$']
422
+ # Syntax error detected
423
+ # Expected any of the following
424
+ # 1 ) a
425
+ # 2 ) b
426
+ # Got $ at position 14
427
+ # Current adjusted input aaaabbaaaabbaba$
428
+ # Current adjusted input aaaabbaaaabbabb$
429
+ # STATE INPUT SYMBOL_STACK ACTION
430
+ # Input string aaaabbaaaabbba$
431
+ # 12 a ['b', 'a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 7
432
+ # Input string aaaabbaaaabbba$
433
+ # 7 $ ['a', 'b', 'a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$']
434
+ # Syntax error detected
435
+ # Expected any of the following
436
+ # 1 ) a
437
+ # 2 ) b
438
+ # Got $ at position 14
439
+ # Current adjusted input aaaabbaaaabbbaa$
440
+ # STATE INPUT SYMBOL_STACK ACTIONCurrent adjusted input aaaabbaaaabbbab$
441
+
442
+ # Input string aaaabbaaaabbbb$
443
+ # 7 b ['a', 'b', 'a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 12
444
+ # Input string aaaabbaaaabbbb$
445
+ # 12 $ ['b', 'a', 'b', 'a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$']
446
+ # Syntax error detected
447
+ # Expected any of the following
448
+ # 1 ) a
449
+ # 2 ) b
450
+ # Got $ at position 14
451
+ # Current adjusted input aaaabbaaaabbbba$
452
+ # STATE INPUT Current adjusted input aaaabbaaaabbbbb$
453
+ # SYMBOL_STACK ACTION
454
+ # Input string aaaabbaaaabbaaa$
455
+ # 12 a ['b', 'a', 'b', 'a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 7
456
+ # Input string aaaabbaaaabbaaa$
457
+ # 7 $ ['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$']
458
+ # Syntax error detected
459
+ # Expected any of the following
460
+ # 1 ) a
461
+ # 2 ) b
462
+ # Got $ at position 15
463
+ # Current adjusted input aaaabbaaaabbaaaa$
464
+ # STATE INPUT SYMBOL_STACK ACTION
465
+ # Current adjusted input aaaabbaaaabbaaab$
466
+ # Input string aaaabbaaaabbaab$
467
+ # 7 b ['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$'] shift 12
468
+ # Input string aaaabbaaaabbaab$
469
+ # 12 $ ['b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', 'b', 'b', 'S', 'a', 'a', 'a', 'a', '$']
470
+ # Syntax error detected
471
+ # Expected any of the following
472
+ # 1 ) a
473
+ # 2 ) b
474
+ # Got $ at position 15
475
+ # Current adjusted input aaaabbaaaabbaaba$
476
+ # Current adjusted input aaaabbaaaabbaabb$
477
+ # ..... (further output compressed)
0 commit comments