-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGrammer.py
483 lines (434 loc) · 23.3 KB
/
Grammer.py
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
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
non_terminals = {"Goal","Source","MainClass",
"ClassDeclarations","ClassDeclaration",
"Extension","FieldDeclarations",
"FieldDeclaration","VarDeclarations",
"VarDeclaration","MethodDeclarations",
"MethodDeclaration","Parameters",
"Parameter","Type","Statements",
"Statement","GenExpression",
"Expression","Term",
"Factor","RelExpression",
"RelTerm","Arguments",
"Argument","Identifier",
"Integer"
}
added_non_terminals = {"C_PRIME",
"D_PRIME",
"E_PRIME",
"G_PRIME",
"H_PRIME",
"L_PRIME",
"N_PRIME"
}
terminals = {'EOF','public','{',
'static','void','main',
'(',')','}','class','extends',
';','return',',','boolean',
'int','if','else','while',
'for','=','+=','System.out.println',
'+','-','*','.','true','false',
'&&','==','<','identifier','integer'
}
# Thanks to JFLAP for this parse table :)
# The parse table works as a dictionary with
# tuple type keys:
# ll1ParseTable = {("GenExpression",'('):["Expression","N_PRIME"],
# ("Expression",'('):["Term","C_PRIME"],
# ("Term",'('):["Factor","E_PRIME"],
# ("Factor",'('):['(',"Expression",')'],
# ("RelExpression",'('):["RelTerm","D_PRIME"],
# ("RelTerm",'('):["Expression","L_PRIME"],
# ("Arguments",'('):["GenExpression","Argument"],
# ("H_PRIME",'('):['(',"Arguments",')'],
#
# ("Parameters",')'):['epsilon'],
# ("Parameter",')'):['epsilon'],
# ("Arguments",')'):['epsilon'],
# ("Argument",')'):['epsilon'],
# ("C_PRIME",')'):['epsilon'],
# ("D_PRIME",')'):['epsilon'],
# ("E_PRIME",')'):['epsilon'],
# ("G_PRIME",')'):['epsilon'],
# ("H_PRIME",')'):['epsilon'],
# ("N_PRIME",')'):['epsilon'],
#
# ("E_PRIME",'*'):['*',"Factor","E_PRIME"],
# ("G_PRIME",'*'):['epsilon'],
# ("H_PRIME",'*'):['epsilon'],
#
# ("C_PRIME",'+'):['+',"Term","C_PRIME"],
# ("E_PRIME",'+'):['epsilon'],
# ("G_PRIME",'+'):['epsilon'],
# ("H_PRIME",'+'):['epsilon'],
#
# ("Parameter",','):[',',"Type","Identifier","Parameter"],
# ("Argument",','):[',',"GenExpression","Argument"],
# ("C_PRIME",','):['epsilon'],
# ("D_PRIME",','):['epsilon'],
# ("E_PRIME",','):['epsilon'],
# ("G_PRIME",','):['epsilon'],
# ("H_PRIME",','):['epsilon'],
# ("N_PRIME",','):['epsilon'],
#
# ("C_PRIME",'-'):['-',"Term","C_PRIME"],
# ("E_PRIME",'-'):['epsilon'],
# ("G_PRIME",'-'):['epsilon'],
# ("H_PRIME",'-'):['epsilon'],
#
# ("G_PRIME",'.'):['.','identifier',"H_PRIME"],
#
# ("C_PRIME",';'):['epsilon'],
# ("D_PRIME",';'):['epsilon'],
# ("E_PRIME",';'):['epsilon'],
# ("G_PRIME",';'):['epsilon'],
# ("H_PRIME",';'):['epsilon'],
# ("N_PRIME",';'):['epsilon'],
#
# ("C_PRIME",'<'):['epsilon'],
# ("E_PRIME",'<'):['epsilon'],
# ("G_PRIME",'<'):['epsilon'],
# ("H_PRIME",'<'):['epsilon'],
# ("L_PRIME",'<'):['<',"Expression"],
# ("N_PRIME",'<'):["L_PRIME","D_PRIME"],
#
# ("Goal",'public'):["Source",'EOF'],
# ("Source", 'public'): ["ClassDeclarations", "MainClass"],
# ("MainClass", 'public'): ['public', 'class',
# "Identifier",'{','public',
# 'static','void','main','(',
# ')','{',"VarDeclarations","Statements",
# '}','}'],
# ("ClassDeclarations", 'public'): ['epsilon'],
# ("FieldDeclarations", 'public'): ['epsilon'],
# ("MethodDeclarations", 'public'): ["MethodDeclaration", "MethodDeclarations"],
# ("MethodDeclaration", 'public'): ['public','static',
# "Type","Identifier",
# '(',"Parameters",')',
# '{',"VarDeclarations",
# "Statements",'return',
# "GenExpression",';','}'],
#
# ("Goal",'class'):["Source",'EOF'],
# ("Source", 'class'): ["ClassDeclarations", "MainClass"],
# ("ClassDeclarations", 'class'): ["ClassDeclaration","ClassDeclarations"],
# ("ClassDeclaration", 'class'): ['class',"Identifier","Extension",
# '{',"FieldDeclarations","MethodDeclarations",
# '}'],
#
# ("GenExpression", 'true'): ["Expression", "N_PRIME"],
# ("Expression", 'true'): ["Term", "C_PRIME"],
# ("Term", 'true'): ["Factor", "E_PRIME"],
# ("Factor", 'true'): ['true'],
# ("RelExpression",'true'):["RelTerm","D_PRIME"],
# ("RelTerm",'true'):["Expression","L_PRIME"],
# ("Arguments",'true'):["GenExpression","Argument"],
#
# ("FieldDeclarations",'static'):["FieldDeclaration","FieldDeclarations"],
# ("FieldDeclaration",'static'):['static',"Type","Identifier",';'],
#
# ("GenExpression", 'false'): ["Expression", "N_PRIME"],
# ("Expression", 'false'): ["Term", "C_PRIME"],
# ("Term", 'false'): ["Factor", "E_PRIME"],
# ("Factor", 'false'): ['false'],
# ("RelExpression",'false'):["RelTerm","D_PRIME"],
# ("RelTerm",'false'):["Expression","L_PRIME"],
# ("Arguments",'false'):["GenExpression","Argument"],
#
# ("C_PRIME",'&&'):['epsilon'],
# ("D_PRIME",'&&'):['&&',"RelTerm","D_PRIME"],
# ("E_PRIME",'&&'):['epsilon'],
# ("G_PRIME",'&&'):['epsilon'],
# ("H_PRIME",'&&'):['epsilon'],
#
# ("C_PRIME",'=='):['epsilon'],
# ("E_PRIME",'=='):['epsilon'],
# ("G_PRIME",'=='):['epsilon'],
# ("H_PRIME",'=='):['epsilon'],
# ("L_PRIME",'=='):['==',"Expression"],
# ("N_PRIME",'=='):["L_PRIME","D_PRIME"],
#
# ("Extension",'extends'):['extends',"Identifier"],
#
# ("VarDeclarations",'return'):['epsilon'],
# ("Statements",'return'):['epsilon'],
#
# ("VarDeclarations",'boolean'):["VarDeclaration","VarDeclarations"],
# ("VarDeclaration",'boolean'):["Type","Identifier",';'],
# ("Parameters",'boolean'):["Type","Identifier","Parameter"],
# ("Type",'boolean'):['boolean'],
#
# ("VarDeclarations", 'int'): ["VarDeclaration", "VarDeclarations"],
# ("VarDeclaration", 'int'): ["Type", "Identifier", ';'],
# ("Parameters", 'int'): ["Type", "Identifier", "Parameter"],
# ("Type",'int'):['int'],
#
# ("VarDeclarations",'if'):['epsilon'],
# ("Statements",'if'):["Statement","Statements"],
# ("Statement",'if'):['if','(',"GenExpression",')',
# "Statement",'else',"Statement"],
#
# ("VarDeclarations",'while'):['epsilon'],
# ("Statements",'while'):["Statement","Statements"],
# ("Statement",'while'):['while','(',"GenExpression",')',
# "Statement"],
#
# ("VarDeclarations",'for'):['epsilon'],
# ("Statements",'for'):["Statement","Statements"],
# ("Statement",'for'):['for','(',"Identifier",
# '=',"Integer",';',"RelTerm",';',
# "Identifier",'+=',"Integer",')',
# "Statement"],
#
# ("GenExpression", 'integer'): ["Expression", "N_PRIME"],
# ("Expression", 'integer'): ["Term", "C_PRIME"],
# ("Term", 'integer'): ["Factor", "E_PRIME"],
# ("Factor",'integer'):["Integer"],
# ("RelExpression",'integer'):["RelTerm","D_PRIME"],
# ("RelTerm",'integer'):["Expression","L_PRIME"],
# ("Arguments",'integer'):["GenExpression","Argument"],
# ("Integer",'integer'):['integer'],
#
# ("VarDeclarations",'System.out.println'):['epsilon'],
# ("Statements",'System.out.println'):["Statement","Statements"],
# ("Statement",'System.out.println'):['System.out.println','(',
# "GenExpression",')',';'],
#
# ("VarDeclarations",'identifier'):['epsilon'],
# ("Statements",'identifier'):["Statement","Statements"],
# ("Statement",'identifier'):["Identifier",'=',"GenExpression",';'],
# ("GenExpression",'identifier'):["Expression","N_PRIME"],
# ("Expression",'identifier'):["Term","C_PRIME"],
# ("Term",'identifier'):["Factor","E_PRIME"],
# ("Factor",'identifier'):['identifier',"G_PRIME"],
# ("RelExpression",'identifier'):["RelTerm","D_PRIME"],
# ("RelTerm",'identifier'):["Expression","L_PRIME"],
# ("Arguments",'identifier'):["GenExpression","Argument"],
# ("Identifier",'identifier'):['identifier'],
#
# ("Extension",'{'):['epsilon'],
# ("VarDeclarations",'{'):['epsilon'],
# ("Statements",'{'):["Statement","Statements"],
# ("Statement",'{'):['{',"Statements",'}'],
#
# ("FieldDeclarations",'}'):['epsilon'],
# ("VarDeclarations",'}'):['epsilon'],
# ("MethodDeclarations",'}'):['epsilon'],
# ("Statements",'}'):['epsilon']
#
# }
# The parse table works as a dictionary with
# tuple type keys:
ll1ParseTable_with_codegens = {("GenExpression",'('):["Expression","N_PRIME"],
("Expression",'('):["Term","C_PRIME"],
("Term",'('):["Factor","E_PRIME"],
("Factor",'('):['(',"Expression",')'],
("RelExpression",'('):["RelTerm","D_PRIME"],
("RelTerm",'('):["Expression","L_PRIME"],
("Arguments",'('):["GenExpression","Argument"],
("H_PRIME",'('):["#callFUNC",'(',"Arguments",')',"#endCallFUNC"],
("Parameters",')'):['epsilon'],
("Parameter",')'):["#initFuncParam"],
("Arguments",')'):['epsilon'],
("Argument",')'):["#pFuncArgs"],
("C_PRIME",')'):['epsilon'],
("D_PRIME",')'):['epsilon'],
("E_PRIME",')'):['epsilon'],
("G_PRIME",')'):["#insIDadd"],
("H_PRIME",')'):["#pCLS_ID"],#OK
("N_PRIME",')'):['epsilon'],
("E_PRIME",'*'):['*',"Factor","#MULT","E_PRIME"],
("G_PRIME",'*'):["#insIDadd"],
("H_PRIME",'*'):["#pCLS_ID"],#OK
("C_PRIME",'+'):['+',"Term","#ADD","C_PRIME"],
("E_PRIME",'+'):['epsilon'],
("G_PRIME",'+'):["#insIDadd"],
("H_PRIME",'+'):["#pCLS_ID"],#OK
("Parameter",','):["#initFuncParam",',',"Type","Identifier","Parameter"],
("Argument",','):[',',"GenExpression","Argument"],
("C_PRIME",','):['epsilon'],
("D_PRIME",','):['epsilon'],
("E_PRIME",','):['epsilon'],
("G_PRIME",','):["#insIDadd"],
("H_PRIME",','):["#pCLS_ID"],#OK
("N_PRIME",','):['epsilon'],
("C_PRIME",'-'):['-',"Term","#SUB","C_PRIME"],
("E_PRIME",'-'):['epsilon'],
("G_PRIME",'-'):["#insIDadd"],
("H_PRIME",'-'):["#pCLS_ID"],#OK
("G_PRIME",'.'):['.',"Identifier","H_PRIME"],# Changed "identifier" to "Identifier" and #OK
("C_PRIME",';'):['epsilon'],
("D_PRIME",';'):['epsilon'],
("E_PRIME",';'):['epsilon'],
("G_PRIME",';'):["#insIDadd"],
("H_PRIME",';'):["#pCLS_ID"],#OK
("N_PRIME",';'):['epsilon'],
("C_PRIME",'<'):['epsilon'],
("E_PRIME",'<'):['epsilon'],
("G_PRIME",'<'):["#insIDadd"],
("H_PRIME",'<'):["#pCLS_ID"],#OK
("L_PRIME",'<'):['<',"Expression","#LT"],
("N_PRIME",'<'):["L_PRIME","D_PRIME"],
("Goal",'public'):["Source",'EOF'],
("Source", 'public'): ["ClassDeclarations", "MainClass"],
("MainClass", 'public'): ['public', 'class',
"Identifier",'{','public',
'static','void','main','(',
')','{',"#enteredMain","VarDeclarations","Statements",#OK !
'}',"#GenTheCode",'}'],
("ClassDeclarations", 'public'): ['epsilon'],
("FieldDeclarations", 'public'): ['epsilon'],
("MethodDeclarations", 'public'): ["MethodDeclaration", "MethodDeclarations"],
("MethodDeclaration", 'public'): ['public','static',
"Type","Identifier","#genFunc",
'(',"Parameters",')',
'{',"VarDeclarations",
"Statements",'return',
"GenExpression",';',"#endFunc",'}'],
("Goal",'class'):["Source",'EOF'],
("Source", 'class'): ["ClassDeclarations", "MainClass"],
("ClassDeclarations", 'class'): ["ClassDeclaration","ClassDeclarations"],
("ClassDeclaration", 'class'): ['class',"Identifier","Extension","#newCLSscope",#OK
'{',"FieldDeclarations","MethodDeclarations",
'}',"#endCLSscope"],#OK
("GenExpression", 'true'): ["Expression", "N_PRIME"],
("Expression", 'true'): ["Term", "C_PRIME"],
("Term", 'true'): ["Factor", "E_PRIME"],
("Factor", 'true'): ["#pBOOLconst",'true'],
("RelExpression",'true'):["RelTerm","D_PRIME"],
("RelTerm",'true'):["Expression","L_PRIME"],
("Arguments",'true'):["GenExpression","Argument"],
("FieldDeclarations",'static'):["FieldDeclaration","FieldDeclarations"],
("FieldDeclaration",'static'):['static',"Type","Identifier","#addIDToSymTable",';'],#OK
("GenExpression", 'false'): ["Expression", "N_PRIME"],
("Expression", 'false'): ["Term", "C_PRIME"],
("Term", 'false'): ["Factor", "E_PRIME"],
("Factor", 'false'): ["#pBOOLconst",'false'],
("RelExpression",'false'):["RelTerm","D_PRIME"],
("RelTerm",'false'):["Expression","L_PRIME"],
("Arguments",'false'):["GenExpression","Argument"],
("C_PRIME",'&&'):['epsilon'],
("D_PRIME",'&&'):['&&',"RelTerm","#andRelTerms","D_PRIME"],
("E_PRIME",'&&'):['epsilon'],
("G_PRIME",'&&'):["#insIDadd"],
("H_PRIME",'&&'):["#pCLS_ID"],#OK
("C_PRIME",'=='):['epsilon'],
("E_PRIME",'=='):['epsilon'],
("G_PRIME",'=='):["#insIDadd"],#OK ['epsilon']
("H_PRIME",'=='):["#pCLS_ID"],#OK
("L_PRIME",'=='):['==',"Expression","#EQ"],
("N_PRIME",'=='):["L_PRIME","D_PRIME"],
("Extension",'extends'):['extends',"Identifier"],
("VarDeclarations",'return'):['epsilon'],
("Statements",'return'):['epsilon'],
("VarDeclarations",'boolean'):["VarDeclaration","VarDeclarations"],
("VarDeclaration",'boolean'):["Type","Identifier","#addIDToSymTable",';'],#OK !
("Parameters",'boolean'):["Type","Identifier","Parameter"],#OK
("Type",'boolean'):["#BOOL",'boolean'],
("VarDeclarations", 'int'): ["VarDeclaration", "VarDeclarations"],
("VarDeclaration", 'int'): ["Type","Identifier","#addIDToSymTable", ';'],#OK !
("Parameters", 'int'): ["Type", "Identifier", "Parameter"],#OK
("Type",'int'):["#INT",'int'],
("VarDeclarations",'if'):['epsilon'],
("Statements",'if'):["Statement","Statements"],
("Statement",'if'):['if','(',"GenExpression",')',"#genIf",
"Statement",'else',"#genElse","Statement","#endIf"],
("VarDeclarations",'while'):['epsilon'],
("Statements",'while'):["Statement","Statements"],
("Statement",'while'):['while','(',"#SAVE_PC","GenExpression",')',"#genWhile",
"Statement","#endWhile"],
("VarDeclarations",'for'):['epsilon'],
("Statements",'for'):["Statement","Statements"],
("Statement",'for'):['for','(',"Identifier","#insIDadd",#OK
'=',"Integer","#assign",';',"#SAVE_PC","RelTerm","#genFor",';',
"Identifier","#insIDadd",'+=',"Integer",')',#OK
"Statement","#endFor"],
("GenExpression", 'integer'): ["Expression", "N_PRIME"],
("Expression", 'integer'): ["Term", "C_PRIME"],
("Term", 'integer'): ["Factor", "E_PRIME"],
("Factor",'integer'):["Integer"],
("RelExpression",'integer'):["RelTerm","D_PRIME"],
("RelTerm",'integer'):["Expression","L_PRIME"],
("Arguments",'integer'):["GenExpression","Argument"],
("Integer",'integer'):["#pconst",'integer'],#OK
("VarDeclarations",'System.out.println'):['epsilon'],
("Statements",'System.out.println'):["Statement","Statements"],
("Statement",'System.out.println'):['System.out.println','(',
"GenExpression",')',"#systemPrint",';'],#OK
("VarDeclarations",'identifier'):['epsilon'],
("Statements",'identifier'):["Statement","Statements"],
("Statement",'identifier'):["Identifier","#insIDadd",'=',"GenExpression","#assign",';'],#OK
("GenExpression",'identifier'):["Expression","N_PRIME"],
("Expression",'identifier'):["Term","C_PRIME"],
("Term",'identifier'):["Factor","E_PRIME"],
("Factor",'identifier'):["#pid",'identifier',"G_PRIME"],#OK !
("RelExpression",'identifier'):["RelTerm","D_PRIME"],
("RelTerm",'identifier'):["Expression","L_PRIME"],
("Arguments",'identifier'):["GenExpression","Argument"],
("Identifier",'identifier'):["#pid",'identifier'],#OK
("Extension",'{'):["#none"],#OK ['epsilon']
("VarDeclarations",'{'):['epsilon'],
("Statements",'{'):["Statement","Statements"],
("Statement",'{'):['{',"Statements",'}'],
("FieldDeclarations",'}'):['epsilon'],
("VarDeclarations",'}'):['epsilon'],
("MethodDeclarations",'}'):['epsilon'],
("Statements",'}'):['epsilon'],
##### For Panic Mode:
("Goal",'$'):["--SYNCH--"],
("Source",'EOF'):["--SYNCH--"],
("MainClass", 'EOF'):["--SYNCH--"],
("ClassDeclaration", 'public'): ["--SYNCH--"],
("FieldDeclaration", 'public'): ["--SYNCH--"],
("FieldDeclaration", '}'): ["--SYNCH--"],
("VarDeclaration", 'if'): ["--SYNCH--"],
("VarDeclaration", 'while'): ["--SYNCH--"],
("VarDeclaration", 'for'): ["--SYNCH--"],
("VarDeclaration", 'System.out.println'): ["--SYNCH--"],
("VarDeclaration", 'identifier'): ["--SYNCH--"],
("VarDeclaration", '{'): ["--SYNCH--"],
("VarDeclaration", '}'): ["--SYNCH--"],
("VarDeclaration", 'return'): ["--SYNCH--"],
("MethodDeclaration", '}'): ["--SYNCH--"],
("Type", 'identifier'): ["--SYNCH--"],
("Statement", 'else'): ["--SYNCH--"],
("Statement", '}'): ["--SYNCH--"],
("Statement", 'return'): ["--SYNCH--"],
("GenExpression", ')'): ["--SYNCH--"],
("GenExpression", ';'): ["--SYNCH--"],
("GenExpression", ','): ["--SYNCH--"],
("Expression", ')'): ["--SYNCH--"],
("Expression", '&&'): ["--SYNCH--"],
("Expression", '=='): ["--SYNCH--"],
("Expression", ';'): ["--SYNCH--"],
("Expression", '<'): ["--SYNCH--"],
("Expression", ','): ["--SYNCH--"],
("Term", ')'): ["--SYNCH--"],
("Term", '&&'): ["--SYNCH--"],
("Term", '=='): ["--SYNCH--"],
("Term", ';'): ["--SYNCH--"],
("Term", '+'): ["--SYNCH--"],
("Term", '<'): ["--SYNCH--"],
("Term", ','): ["--SYNCH--"],
("Term", '-'): ["--SYNCH--"],
("Factor", ')'): ["--SYNCH--"],
("Factor", '&&'): ["--SYNCH--"],
("Factor", '*'): ["--SYNCH--"],
("Factor", '=='): ["--SYNCH--"],
("Factor", ';'): ["--SYNCH--"],
("Factor", '+'): ["--SYNCH--"],
("Factor", '<'): ["--SYNCH--"],
("Factor", ','): ["--SYNCH--"],
("Factor", '-'): ["--SYNCH--"],
("RelTerm", ')'): ["--SYNCH--"],
("RelTerm", '&&'): ["--SYNCH--"],
("RelTerm", ';'): ["--SYNCH--"],
("RelTerm", ','): ["--SYNCH--"],
("Identifier", '+='): ["--SYNCH--"],
("Identifier", '('): ["--SYNCH--"],
("Identifier", ')'): ["--SYNCH--"],
("Identifier", '{'): ["--SYNCH--"],
("Identifier", 'extends'): ["--SYNCH--"],
("Identifier", ';'): ["--SYNCH--"],
("Identifier", ','): ["--SYNCH--"],
("Identifier", '='): ["--SYNCH--"],
}