Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit f895872

Browse files
authoredJul 15, 2019
Add files via upload
1 parent 23f335a commit f895872

File tree

1 file changed

+368
-66
lines changed

1 file changed

+368
-66
lines changed
 

‎LR1parsing3.py

Lines changed: 368 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
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()
55
def import_grammar(fileHandle):
66
G,T,Nt = [],[],[]
77
for lines in fileHandle:
@@ -18,33 +18,8 @@ def import_grammar(fileHandle):
1818
if production not in G: G.append((production[0],production[1]))
1919
T.append('$')
2020
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):
4622
J = [p for p in I]
47-
first_set_list = first_set(G,T,Nt)
4823
while True:
4924
J1 = [x for x in J]
5025
for x in J1:
@@ -55,23 +30,18 @@ def closure(I,G,T,Nt):
5530
if handle[k+1] in Nt:
5631
for p in G:
5732
beta = ''.join(handle[m] for m in range(k+2,len(handle)))
58-
b1 = list(beta+a)[0]
33+
b = list(beta+a)[0]
5934
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)
6737
flag = True
6838
for x in J1:
6939
if x not in J:
7040
flag = False
7141
J.append(x)
7242
if flag: break
7343
return J
74-
def goto(I,G,X,T,Nt):
44+
def goto(I,G,X,Nt):
7545
W = []
7646
for x in I:
7747
handle = list(x[1])
@@ -81,17 +51,17 @@ def goto(I,G,X,T,Nt):
8151
S1 = ''.join([handle[i] for i in range(k)])
8252
S2 = ''.join([handle[i] for i in range(k+2,len(handle))])
8353
W.append((x[0],S1+X+'.'+S2,x[2]))
84-
return closure(W,G,T,Nt)
54+
return closure(W,G,Nt)
8555
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) ]
8757
action = {}
8858
goto_k = {}
8959
reduction_states = {}
9060
while True:
9161
C1 = [ I for I in C ]
9262
for I in C1:
9363
for X in T:
94-
goto_list = goto(I,G,X,T,Nt)
64+
goto_list = goto(I,G,X,Nt)
9565
if len(goto_list)!=0 and goto_list not in C1:
9666
C1.append(goto_list)
9767
if C1.index(I) not in action: action[C1.index(I)] = {}
@@ -103,7 +73,7 @@ def items(G,T,Nt):
10373
action[C1.index(I)][X] = C1.index(goto_list)
10474
for I in C1:
10575
for X in Nt:
106-
goto_list = goto(I,G,X,T,Nt)
76+
goto_list = goto(I,G,X,Nt)
10777
if len(goto_list)!=0 and goto_list not in C1:
10878
C1.append(goto_list)
10979
if C1.index(I) not in goto_k: goto_k[C1.index(I)] = {}
@@ -134,12 +104,14 @@ def items(G,T,Nt):
134104
if reduction_states[x]['$'] == G[0]:
135105
accept_state = x
136106
break
137-
return action,goto_k,reduction_states,accept_state
107+
return C,action,goto_k,reduction_states,accept_state
138108
def driver():
139-
fileHandle = open('grammar14.txt')
109+
fileHandle = open('grammarinput3.txt')
140110
G,T,Nt = import_grammar(fileHandle)
141111
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]
143115
print 'Action list'
144116
pprint(action_list)
145117
print 'Goto list'
@@ -148,28 +120,358 @@ def driver():
148120
pprint(reduction_states)
149121
print 'Accept state',accept_state
150122
stack = [0]
123+
symbol_stack=['$']
151124
input_str = raw_input('Enter some string ')+'$'
152125
i,top = 0,0
153126
# 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 '\nSyntax 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()
160176
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

Comments
 (0)
Please sign in to comment.