-
Notifications
You must be signed in to change notification settings - Fork 2
/
rustish-parser-i.js
611 lines (589 loc) · 96.4 KB
/
rustish-parser-i.js
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
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
// parse table and evals
var TABLE = {
S: {";":[1],"if":[1],"{":[1],"}":[],"else":[],"while":[1],"match":[1],"=>":[],",":[],"|":[1],"#":[1],"[":[1],"]":[],"ident":[1],"=":[],"(":[1],")":[],"pub":[1],"priv":[1],"fn":[1],"->":[],"!":[1],"<":[],">":[],"lifetime":[1],":":[],"self":[1],"||":[1],"::":[],"let":[1],"mut":[],"&":[1],"*":[1],"~":[1],"@":[1],"loop":[1],"unsafe":[1],"for":[1],"in":[],"true":[1],"false":[1],"litchar":[1],"litfloat":[1],"litint":[1],"litstr":[1],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[1],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[1],"break":[1],"continue":[1],"struct":[1],"impl":[1],"trait":[1],"use":[1],"mod":[1],"enum":[1],"_":[],"$":[1]}
,B: {";":[3],"if":[6],"{":[6],"}":[2],"else":[],"while":[6],"match":[6],"=>":[],",":[],"|":[5],"#":[8],"[":[5],"]":[],"ident":[5],"=":[],"(":[5],")":[],"pub":[7],"priv":[7],"fn":[7],"->":[],"!":[5],"<":[],">":[],"lifetime":[6],":":[],"self":[5],"||":[5],"::":[],"let":[4],"mut":[],"&":[5],"*":[5],"~":[5],"@":[5],"loop":[6],"unsafe":[6],"for":[6],"in":[],"true":[5],"false":[5],"litchar":[5],"litfloat":[5],"litint":[5],"litstr":[5],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[5],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[5],"break":[5],"continue":[5],"struct":[7],"impl":[7],"trait":[7],"use":[7],"mod":[7],"enum":[7],"_":[],"$":[2]}
,TB: {";":[10],"if":[],"{":[],"}":[9],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[9]}
,IF: {";":[],"if":[11],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TIF: {";":[12],"if":[12],"{":[12],"}":[12],"else":[13],"while":[12],"match":[12],"=>":[],",":[12],"|":[12],"#":[12],"[":[12],"]":[12],"ident":[12],"=":[],"(":[12],")":[12],"pub":[12],"priv":[12],"fn":[12],"->":[],"!":[12],"<":[12],">":[12],"lifetime":[12],":":[],"self":[12],"||":[12],"::":[],"let":[12],"mut":[],"&":[12],"*":[12],"~":[12],"@":[12],"loop":[12],"unsafe":[12],"for":[12],"in":[],"true":[12],"false":[12],"litchar":[12],"litfloat":[12],"litint":[12],"litstr":[12],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[12],"-":[12],"&&":[12],".":[12],"/":[12],"%":[12],"^":[12],"<<":[12],">>":[12],"<=":[12],"==":[12],"!=":[12],">=":[12],"as":[12],"return":[12],"break":[12],"continue":[12],"struct":[12],"impl":[12],"trait":[12],"use":[12],"mod":[12],"enum":[12],"_":[12],"$":[12]}
,TEL: {";":[],"if":[15],"{":[14],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,WH: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[16],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,MT: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[17],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,MA: {";":[],"if":[],"{":[],"}":[18],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[19],"=":[],"(":[19],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[19],"false":[19],"litchar":[19],"litfloat":[19],"litint":[19],"litstr":[19],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[19],"$":[]}
,MB: {";":[],"if":[21],"{":[21],"}":[],"else":[],"while":[21],"match":[21],"=>":[],",":[],"|":[20],"#":[],"[":[20],"]":[],"ident":[20],"=":[],"(":[20],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[20],"<":[],">":[],"lifetime":[21],":":[],"self":[20],"||":[20],"::":[],"let":[],"mut":[],"&":[20],"*":[20],"~":[20],"@":[20],"loop":[21],"unsafe":[21],"for":[21],"in":[],"true":[20],"false":[20],"litchar":[20],"litfloat":[20],"litint":[20],"litstr":[20],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[20],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[20],"break":[20],"continue":[20],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TMB1: {";":[],"if":[],"{":[],"}":[22],"else":[],"while":[],"match":[],"=>":[],",":[23],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TMB2: {";":[],"if":[],"{":[],"}":[24],"else":[],"while":[],"match":[],"=>":[],",":[25],"|":[],"#":[],"[":[],"]":[],"ident":[24],"=":[],"(":[24],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[24],"false":[24],"litchar":[24],"litfloat":[24],"litint":[24],"litstr":[24],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[24],"$":[]}
,MP: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[27],"=":[],"(":[27],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[26],"false":[26],"litchar":[26],"litfloat":[26],"litint":[26],"litstr":[26],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[27],"$":[]}
,LLIT: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[28],",":[],"|":[29],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,AT: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[30],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,LAI: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[32],"|":[],"#":[],"[":[],"]":[31],"ident":[],"=":[],"(":[],")":[31],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,AI: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[33],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TAI: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[34],"|":[],"#":[],"[":[],"]":[34],"ident":[],"=":[35],"(":[36],")":[34],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,VIS: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[38],"priv":[39],"fn":[37],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[37],"impl":[37],"trait":[37],"use":[37],"mod":[37],"enum":[37],"_":[],"$":[]}
,TVIS: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[40],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[41],"impl":[43],"trait":[42],"use":[44],"mod":[45],"enum":[46],"_":[],"$":[]}
,HFN: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[47],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,FN: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[48],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,FS: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[49],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,RT: {";":[50],"if":[],"{":[50],"}":[50],"else":[],"while":[],"match":[],"=>":[],",":[50],"|":[50],"#":[],"[":[],"]":[50],"ident":[],"=":[50],"(":[],")":[50],"pub":[],"priv":[],"fn":[],"->":[51],"!":[],"<":[],">":[50],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[50]}
,TRT: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[53],"#":[],"[":[53],"]":[],"ident":[53],"=":[],"(":[53],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[52],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[53],"::":[],"let":[],"mut":[53],"&":[53],"*":[53],"~":[53],"@":[53],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,GE: {";":[54],"if":[],"{":[54],"}":[54],"else":[],"while":[],"match":[],"=>":[],",":[54],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[54],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[55],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,LLG: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[57],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[56],"lifetime":[57],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TLLG: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[59],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[58],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,LG: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[60],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[61],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,LFA: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[62],"#":[],"[":[],"]":[],"ident":[63],"=":[],"(":[63],")":[62],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[63],"||":[],"::":[],"let":[],"mut":[63],"&":[63],"*":[63],"~":[63],"@":[63],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[63],"$":[]}
,TLFA: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[65],"|":[64],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[64],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,VD: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[66],"=":[],"(":[66],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[66],"||":[],"::":[],"let":[],"mut":[66],"&":[66],"*":[66],"~":[66],"@":[66],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[66],"$":[]}
,TVD: {";":[67],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[67],"|":[67],"#":[],"[":[],"]":[],"ident":[],"=":[67],"(":[],")":[67],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[67],"lifetime":[],":":[68],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,DES_OR_SELF: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[69],"=":[],"(":[69],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[70],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[69],"$":[]}
,TY: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[72],"#":[],"[":[71],"]":[],"ident":[71],"=":[],"(":[71],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[73],"::":[],"let":[],"mut":[71],"&":[71],"*":[71],"~":[71],"@":[71],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TY1: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[75],"]":[],"ident":[74],"=":[],"(":[76],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TY2: {";":[77],"if":[],"{":[77],"}":[77],"else":[],"while":[],"match":[],"=>":[],",":[77],"|":[77],"#":[],"[":[],"]":[77],"ident":[],"=":[77],"(":[],")":[77],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[78],">":[77],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[77]}
,TTY: {";":[79],"if":[],"{":[79],"}":[79],"else":[],"while":[],"match":[],"=>":[],",":[79],"|":[79],"#":[],"[":[],"]":[79],"ident":[],"=":[79],"(":[],")":[79],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[79],">":[79],"lifetime":[],":":[],"self":[],"||":[],"::":[80],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[79]}
,LTY: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[82],"#":[],"[":[82],"]":[],"ident":[82],"=":[],"(":[82],")":[81],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[81],"lifetime":[],":":[],"self":[],"||":[82],"::":[],"let":[],"mut":[82],"&":[82],"*":[82],"~":[82],"@":[82],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TLTY: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[84],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[83],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[83],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,L: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[85],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TL: {";":[86],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[87],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,LP: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[88],"=":[],"(":[88],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[88],"&":[88],"*":[88],"~":[88],"@":[88],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[88],"$":[]}
,M: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[89],"]":[],"ident":[89],"=":[],"(":[89],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[89],"||":[],"::":[],"let":[],"mut":[90],"&":[91],"*":[92],"~":[93],"@":[94],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[89],"$":[]}
,TM: {";":[],"if":[95],"{":[],"}":[],"else":[],"while":[],"match":[95],"=>":[],",":[],"|":[],"#":[],"[":[95],"]":[],"ident":[95],"=":[],"(":[95],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[95],"<":[],">":[],"lifetime":[],":":[],"self":[95],"||":[],"::":[],"let":[],"mut":[96],"&":[95],"*":[95],"~":[95],"@":[95],"loop":[],"unsafe":[],"for":[],"in":[],"true":[95],"false":[95],"litchar":[95],"litfloat":[95],"litint":[95],"litstr":[95],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[95],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[95],"$":[]}
,P1: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[97],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[98],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,P2: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[101],"]":[],"ident":[],"=":[],"(":[100],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[99],"false":[99],"litchar":[99],"litfloat":[99],"litint":[99],"litstr":[99],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,P3: {";":[],"if":[102],"{":[],"}":[],"else":[],"while":[],"match":[103],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,P4: {";":[],"if":[],"{":[107],"}":[],"else":[],"while":[104],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[105],"unsafe":[106],"for":[108],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,P5: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[109],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[110],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,LIT: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[111],"false":[112],"litchar":[113],"litfloat":[114],"litint":[115],"litstr":[116],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,E1: {";":[117],"if":[],"{":[117],"}":[117],"else":[],"while":[],"match":[],"=>":[],",":[117],"|":[131],"#":[],"[":[],"]":[117],"ident":[],"=":[120],"(":[118],")":[117],"pub":[],"priv":[],"fn":[],"->":[],"!":[119],"<":[131],">":[131],"lifetime":[],":":[],"self":[],"||":[131],"::":[],"let":[],"mut":[],"&":[131],"*":[131],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[121],"-=":[122],"*=":[123],"/=":[124],"%=":[125],"^=":[126],"&=":[127],"|=":[128],"<<=":[129],">>=":[130],"+":[131],"-":[131],"&&":[131],".":[131],"/":[131],"%":[131],"^":[131],"<<":[131],">>":[131],"<=":[131],"==":[131],"!=":[131],">=":[131],"as":[131],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[117]}
,E2: {";":[132],"if":[],"{":[132],"}":[132],"else":[],"while":[],"match":[],"=>":[],",":[132],"|":[133],"#":[],"[":[],"]":[132],"ident":[],"=":[],"(":[],")":[132],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[133],">":[133],"lifetime":[],":":[],"self":[],"||":[133],"::":[],"let":[],"mut":[],"&":[133],"*":[133],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[133],"-":[133],"&&":[133],".":[133],"/":[133],"%":[133],"^":[133],"<<":[133],">>":[133],"<=":[133],"==":[133],"!=":[133],">=":[133],"as":[133],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[132]}
,E3: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[143],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[146],">":[151],"lifetime":[],":":[],"self":[],"||":[152],"::":[],"let":[],"mut":[],"&":[139],"*":[138],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[134],"-":[135],"&&":[136],".":[137],"/":[140],"%":[141],"^":[142],"<<":[144],">>":[145],"<=":[147],"==":[148],"!=":[149],">=":[150],"as":[153],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,E4: {";":[155],"if":[],"{":[154],"}":[155],"else":[],"while":[],"match":[],"=>":[],",":[155],"|":[155],"#":[],"[":[],"]":[155],"ident":[],"=":[155],"(":[155],")":[155],"pub":[],"priv":[],"fn":[],"->":[],"!":[155],"<":[155],">":[155],"lifetime":[],":":[],"self":[],"||":[155],"::":[],"let":[],"mut":[],"&":[155],"*":[155],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[155],"-=":[155],"*=":[155],"/=":[155],"%=":[155],"^=":[155],"&=":[155],"|=":[155],"<<=":[155],">>=":[155],"+":[155],"-":[155],"&&":[155],".":[155],"/":[155],"%":[155],"^":[155],"<<":[155],">>":[155],"<=":[155],"==":[155],"!=":[155],">=":[155],"as":[155],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[155]}
,TE1: {";":[156],"if":[],"{":[156],"}":[156],"else":[],"while":[],"match":[],"=>":[],",":[156],"|":[156],"#":[],"[":[],"]":[156],"ident":[],"=":[],"(":[157],")":[156],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[156],">":[156],"lifetime":[],":":[],"self":[],"||":[156],"::":[],"let":[],"mut":[],"&":[156],"*":[156],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[156],"-":[156],"&&":[156],".":[156],"/":[156],"%":[156],"^":[156],"<<":[156],">>":[156],"<=":[156],"==":[156],"!=":[156],">=":[156],"as":[156],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[156]}
,U: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[159],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[160],"*":[161],"~":[162],"@":[163],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[158],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,W1: {";":[],"if":[167],"{":[],"}":[],"else":[],"while":[],"match":[167],"=>":[],",":[],"|":[],"#":[],"[":[166],"]":[],"ident":[165],"=":[],"(":[166],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[164],"<":[],">":[],"lifetime":[],":":[],"self":[165],"||":[],"::":[],"let":[],"mut":[],"&":[164],"*":[164],"~":[164],"@":[164],"loop":[],"unsafe":[],"for":[],"in":[],"true":[166],"false":[166],"litchar":[166],"litfloat":[166],"litint":[166],"litstr":[166],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[164],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,W2: {";":[],"if":[171],"{":[],"}":[],"else":[],"while":[],"match":[171],"=>":[],",":[],"|":[],"#":[],"[":[170],"]":[],"ident":[169],"=":[],"(":[170],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[168],"<":[],">":[],"lifetime":[],":":[],"self":[169],"||":[],"::":[],"let":[],"mut":[],"&":[168],"*":[168],"~":[168],"@":[168],"loop":[],"unsafe":[],"for":[],"in":[],"true":[170],"false":[170],"litchar":[170],"litfloat":[170],"litint":[170],"litstr":[170],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[168],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,BE: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[175],"#":[],"[":[174],"]":[],"ident":[173],"=":[],"(":[174],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[172],"<":[],">":[],"lifetime":[],":":[],"self":[173],"||":[175],"::":[],"let":[],"mut":[],"&":[172],"*":[172],"~":[172],"@":[172],"loop":[],"unsafe":[],"for":[],"in":[],"true":[174],"false":[174],"litchar":[174],"litfloat":[174],"litint":[174],"litstr":[174],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[172],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[176],"break":[177],"continue":[178],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,NBE: {";":[],"if":[179],"{":[180],"}":[],"else":[],"while":[180],"match":[179],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[180],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[180],"unsafe":[180],"for":[180],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,QE0: {";":[181],"if":[182],"{":[182],"}":[181],"else":[],"while":[182],"match":[182],"=>":[],",":[181],"|":[182],"#":[],"[":[182],"]":[],"ident":[182],"=":[],"(":[182],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[182],"<":[],">":[],"lifetime":[],":":[],"self":[182],"||":[182],"::":[],"let":[],"mut":[],"&":[182],"*":[182],"~":[182],"@":[182],"loop":[182],"unsafe":[182],"for":[182],"in":[],"true":[182],"false":[182],"litchar":[182],"litfloat":[182],"litint":[182],"litstr":[182],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[182],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[181]}
,TC: {";":[183],"if":[],"{":[],"}":[183],"else":[],"while":[],"match":[],"=>":[],",":[183],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[184],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[183]}
,HP4: {";":[],"if":[],"{":[185],"}":[],"else":[],"while":[185],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[186],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[185],"unsafe":[185],"for":[185],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,E: {";":[],"if":[190],"{":[191],"}":[],"else":[],"while":[191],"match":[190],"=>":[],",":[],"|":[],"#":[],"[":[189],"]":[],"ident":[188],"=":[],"(":[189],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[187],"<":[],">":[],"lifetime":[],":":[],"self":[188],"||":[],"::":[],"let":[],"mut":[],"&":[187],"*":[187],"~":[187],"@":[187],"loop":[191],"unsafe":[191],"for":[191],"in":[],"true":[189],"false":[189],"litchar":[189],"litfloat":[189],"litint":[189],"litstr":[189],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[187],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,E0: {";":[],"if":[195],"{":[196],"}":[],"else":[],"while":[196],"match":[195],"=>":[],",":[],"|":[197],"#":[],"[":[194],"]":[],"ident":[193],"=":[],"(":[194],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[192],"<":[],">":[],"lifetime":[],":":[],"self":[193],"||":[197],"::":[],"let":[],"mut":[],"&":[192],"*":[192],"~":[192],"@":[192],"loop":[196],"unsafe":[196],"for":[196],"in":[],"true":[194],"false":[194],"litchar":[194],"litfloat":[194],"litint":[194],"litstr":[194],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[192],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TFQ: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[198],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[199],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TP1: {";":[200],"if":[],"{":[200],"}":[200],"else":[],"while":[],"match":[],"=>":[],",":[200],"|":[200],"#":[],"[":[],"]":[200],"ident":[],"=":[200],"(":[200],")":[200],"pub":[],"priv":[],"fn":[],"->":[],"!":[200],"<":[200],">":[200],"lifetime":[],":":[],"self":[],"||":[200],"::":[201],"let":[],"mut":[],"&":[200],"*":[200],"~":[],"@":[],"loop":[],"unsafe":[],"for":[200],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[200],"-=":[200],"*=":[200],"/=":[200],"%=":[200],"^=":[200],"&=":[200],"|=":[200],"<<=":[200],">>=":[200],"+":[200],"-":[200],"&&":[200],".":[200],"/":[200],"%":[200],"^":[200],"<<":[200],">>":[200],"<=":[200],"==":[200],"!=":[200],">=":[200],"as":[200],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[200]}
,LI: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[202],"#":[],"[":[],"]":[],"ident":[203],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TLI: {";":[],"if":[],"{":[],"}":[204],"else":[],"while":[],"match":[],"=>":[],",":[205],"|":[204],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,LE0: {";":[],"if":[207],"{":[207],"}":[],"else":[],"while":[207],"match":[207],"=>":[],",":[],"|":[207],"#":[],"[":[207],"]":[206],"ident":[207],"=":[],"(":[207],")":[206],"pub":[],"priv":[],"fn":[],"->":[],"!":[207],"<":[],">":[],"lifetime":[],":":[],"self":[207],"||":[207],"::":[],"let":[],"mut":[],"&":[207],"*":[207],"~":[207],"@":[207],"loop":[207],"unsafe":[207],"for":[207],"in":[],"true":[207],"false":[207],"litchar":[207],"litfloat":[207],"litint":[207],"litstr":[207],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[207],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TLE0: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[209],"|":[],"#":[],"[":[],"]":[208],"ident":[],"=":[],"(":[],")":[208],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,SV: {";":[],"if":[],"{":[],"}":[210],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[211],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TSV: {";":[],"if":[],"{":[],"}":[212],"else":[],"while":[],"match":[],"=>":[],",":[213],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,SC: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[214],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TSC: {";":[215],"if":[],"{":[216],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[215],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TSC1: {";":[217],"if":[],"{":[],"}":[217],"else":[],"while":[],"match":[],"=>":[],",":[217],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[218],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,SD: {";":[],"if":[],"{":[],"}":[219],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[220],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TSD: {";":[],"if":[],"{":[],"}":[221],"else":[],"while":[],"match":[],"=>":[],",":[222],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,IMPL: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[223],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,LFN: {";":[],"if":[],"{":[],"}":[224],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[225],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TRAIT: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[226],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,LFS: {";":[],"if":[],"{":[],"}":[227],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[228],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,USE: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[229],"mod":[],"enum":[],"_":[],"$":[]}
,TUSE: {";":[230],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[231],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TTUSE: {";":[],"if":[],"{":[233],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[234],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[232],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,MOD: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[235],"enum":[],"_":[],"$":[]}
,ENUM: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[236],"_":[],"$":[]}
,LEN: {";":[],"if":[],"{":[],"}":[237],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[238],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TLEN: {";":[],"if":[],"{":[],"}":[239],"else":[],"while":[],"match":[],"=>":[],",":[240],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,EN: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[241],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TEN: {";":[],"if":[],"{":[243],"}":[242],"else":[],"while":[],"match":[],"=>":[],",":[242],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[242],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,DES: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[245],"=":[],"(":[246],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[244],"$":[]}
,TDES: {";":[247],"if":[],"{":[249],"}":[247],"else":[],"while":[],"match":[],"=>":[247],",":[247],"|":[247],"#":[],"[":[],"]":[],"ident":[],"=":[247],"(":[248],")":[247],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[247],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[247],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,DES1: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[251],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[250],"$":[]}
,TDES1: {";":[252],"if":[],"{":[252],"}":[252],"else":[],"while":[],"match":[],"=>":[252],",":[252],"|":[252],"#":[],"[":[],"]":[],"ident":[],"=":[252],"(":[252],")":[252],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[252],"self":[],"||":[],"::":[253],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[252],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[254],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,DES2: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[255],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TDES2: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[257],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[256],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,DES3: {";":[],"if":[],"{":[],"}":[258],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[259],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TDES3: {";":[],"if":[],"{":[],"}":[260],"else":[],"while":[],"match":[],"=>":[],",":[261],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,DES3_ITEM: {";":[],"if":[],"{":[],"}":[],"else":[],"while":[],"match":[],"=>":[],",":[],"|":[],"#":[],"[":[],"]":[],"ident":[262],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
,TDES3_ITEM: {";":[],"if":[],"{":[],"}":[263],"else":[],"while":[],"match":[],"=>":[],",":[263],"|":[],"#":[],"[":[],"]":[],"ident":[],"=":[],"(":[],")":[],"pub":[],"priv":[],"fn":[],"->":[],"!":[],"<":[],">":[],"lifetime":[],":":[264],"self":[],"||":[],"::":[],"let":[],"mut":[],"&":[],"*":[],"~":[],"@":[],"loop":[],"unsafe":[],"for":[],"in":[],"true":[],"false":[],"litchar":[],"litfloat":[],"litint":[],"litstr":[],"+=":[],"-=":[],"*=":[],"/=":[],"%=":[],"^=":[],"&=":[],"|=":[],"<<=":[],">>=":[],"+":[],"-":[],"&&":[],".":[],"/":[],"%":[],"^":[],"<<":[],">>":[],"<=":[],"==":[],"!=":[],">=":[],"as":[],"return":[],"break":[],"continue":[],"struct":[],"impl":[],"trait":[],"use":[],"mod":[],"enum":[],"_":[],"$":[]}
};
var NT_WHOSE_FOLLOWSET_HAS_GT_NOT_SHR = ["TY2","TTY","TY1","TRT","RT","TY","TVD","LG","TLLG","LLG","TLTY","LTY"];
var RULES = [
["S",["B"], "$e = $a[0];"]
,["B",["e"], "$e = new NODE.Block();"]
,["B",[";","B"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["B",["L","B"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["B",["BE","TB"], "$a[1].unshift($a[1].items.length === 0 ? $a[0] : $a[0].node); $e = $a[1];"]
,["B",["NBE","B"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["B",["VIS","TVIS","B"], "$a[2].unshift($a[1]); $e = $a[2];"]
,["B",["AT","B"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["TB",["e"], "$e = new NODE.Block();"]
,["TB",[";","B"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["IF",["if","E","{","B","}","TIF"], "$a[5].unshift([[$a[0]], exprToAST($a[1]), $a[2], [[], $a[3]], $a[4]]); $e = new NODE.If($a[5]);"]
,["TIF",["e"], "$e = [];"]
,["TIF",["else","TEL"], "$a[1][0][0].unshift($a[0]); $e = $a[1];"]
,["TEL",["{","B","}"], "$e = [[[], null, $a[0], [[], $a[1]], $a[2]]];"]
,["TEL",["IF"], "$e = $a[0].children;"]
,["WH",["while","E","{","B","}"], "$e = new NODE.While([$a[0], exprToAST($a[1]), $a[2], $a[3], $a[4]]);"]
,["MT",["match","E","{","MA","}"], "$e = new NODE.Match(exprToAST($a[1]), $a[3]);"]
,["MA",["e"], "$e = [];"]
,["MA",["MP","=>","MB"], "$a[2][1].unshift([$a[0], $a[2][0]]); $e = $a[2][1];"]
,["MB",["BE","TMB1"], "$e = $a;"]
,["MB",["NBE","TMB2"], "$e = $a;"]
,["TMB1",["e"], "$e = [];"]
,["TMB1",[",","MA"], "$e = $a[1];"]
,["TMB2",["MA"], "$e = $a[0];"]
,["TMB2",[",","MA"], "$e = $a[1];"]
,["MP",["LIT","LLIT"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["MP",["DES"], "$e = $a[0];"]
,["LLIT",["e"], "$e = [];"]
,["LLIT",["|","LIT","LLIT"], "$a[2].unshift($a[1]); $e = $a[2];"]
,["AT",["#","[","AI","LAI","]"], "$e = new NODE.Attribute($a);"]
,["LAI",["e"], "$e = null;"]
,["LAI",[",","AI","LAI"], "$e = null;"]
,["AI",["ident","TAI"], "$e = null;"]
,["TAI",["e"], "$e = null;"]
,["TAI",["=","LIT"], "$e = null;"]
,["TAI",["(","AI","LAI",")"], "$e = null;"]
,["VIS",["e"], "$e = null;"]
,["VIS",["pub"], "$e = null;"]
,["VIS",["priv"], "$e = null;"]
,["TVIS",["FN"], "$e = $a[0];"]
,["TVIS",["SC"], "$e = $a[0];"]
,["TVIS",["TRAIT"], "$e = $a[0];"]
,["TVIS",["IMPL"], "$e = $a[0];"]
,["TVIS",["USE"], "$e = $a[0];"]
,["TVIS",["MOD"], "$e = $a[0];"]
,["TVIS",["ENUM"], "$e = $a[0];"]
,["HFN",["fn","ident","GE","(","LFA",")","RT"], "$e = $a;"]
,["FN",["HFN","{","B","}"], "$e = new NODE.Fn($a);"]
,["FS",["HFN",";"], "$e = $a;"]
,["RT",["e"], "$e = new NODE.TypeMissing();"]
,["RT",["->","TRT"], "$e = $a[1];"]
,["TRT",["!"], "$e = new NODE.TypeDiverging();"]
,["TRT",["TY"], "$e = $a[0];"]
,["GE",["e"], "$e = [];"]
,["GE",["<","LLG",">"], "$e = $a[1];"]
,["LLG",["e"], "$e = [];"]
,["LLG",["LG","TLLG"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["TLLG",["e"], "$e = [];"]
,["TLLG",[",","LG","TLLG"], "$a[2].unshift($a[1]); $e = $a[2];"]
,["LG",["ident","TVD"], "$e = $a[0];"] // TODO
,["LG",["lifetime"], "throw new LocatedError('lifetime not supported', $a[0]);"]
,["LFA",["e"], "$e = [];"]
,["LFA",["VD","TLFA"], "if ($a[0][0] !== null) $a[1].unshift($a[0]); $e = $a[1];"] // don't add self (VD[0] === null)
,["TLFA",["e"], "$e = [];"]
,["TLFA",[",","VD","TLFA"], "if ($a[1][0] !== null) $a[2].unshift($a[1]); $e = $a[2];"] // don't add self (VD[0] === null)
,["VD",["M","DES_OR_SELF","TVD"], "$e = [$a[1], $a[2]];"]
,["TVD",["e"], "$e = new NODE.TypeMissing();"]
,["TVD",[":","TY"], "$e = $a[1];"]
,["DES_OR_SELF",["DES"], "$e = $a[0];"]
,["DES_OR_SELF",["self"], "$e = null;"]
,["TY",["M","TY1"], "$e = $a[1];"]
,["TY",["|","LFA","|","RT"], "$e = new NODE.TypeClosure($a[1], $a[3]);"]
,["TY",["||","RT"], "$e = new NODE.TypeClosure([], $a[1]);"]
,["TY1",["ident","TTY","TY2"], "$a[1].unshift(new NODE.Ident($a[0], true)); $e = new NODE.TypeIdent(exprToAST($a[1]), $a[2]);"]
,["TY1",["[","TY","]"], "$e = new NODE.TypeArray($a[1]);"]
,["TY1",["(","LTY",")"], "$e = new NODE.TypeTuple($a[1]);"]
,["TY2",["e"], "$e = [];"]
,["TY2",["<","LTY",">"], "$e = $a[1];"]
,["TTY",["e"], "$e = [];"]
,["TTY",["::","ident","TTY"], "$a[2].unshift(new NODE.Ident($a[1], true)); $a[2].unshift(new NODE.Operator(NODE.ModProperty, $a[0], 2)); $e = $a[2];"]
,["LTY",["e"], "$e = [];"]
,["LTY",["TY","TLTY"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["TLTY",["e"], "$e = [];"]
,["TLTY",[",","TY","TLTY"], "$a[2].unshift($a[1]); $e = $a[2];"]
,["L",["let","LP","TVD","TL",";"], "$e = new NODE.Let($a);"]
,["TL",["e"], "$e = null;"]
,["TL",["=","E0"], "$e = $a;"]
,["LP",["M","DES"], "$e = $a[1];"]
,["M",["e"], "$e = null;"]
,["M",["mut"], "$e = null;"]
,["M",["&","TM"], "$e = null;"]
,["M",["*","TM"], "$e = null;"]
,["M",["~","TM"], "$e = null;"]
,["M",["@","TM"], "$e = null;"]
,["TM",["e"], "$e = null;"]
,["TM",["mut"], "$e = null;"]
,["P1",["ident","TP1"], "$a[1].unshift(new NODE.Ident($a[0])); $e = exprToAST($a[1]);"]
,["P1",["self"], "$e = new NODE.Ident($a[0], true);"] // true avoid instantiation of self's type
,["P2",["LIT"], "$e = $a[0];"]
,["P2",["(","LE0",")"], "$e = new NODE.Tuple($a);"]
,["P2",["[","LE0","]"], "$e = new NODE.GenericArray($a);"]
,["P3",["IF"], "$e = $a[0];"]
,["P3",["MT"], "$e = $a[0];"]
,["P4",["WH"], "$e = $a[0];"]
,["P4",["loop","{","B","}"], "$e = new NODE.Loop($a);"]
,["P4",["unsafe","{","B","}"], "$e = new NODE.BareBlock($a[2]);"]
,["P4",["{","B","}"], "$e = new NODE.BareBlock($a[1]);"]
,["P4",["for","DES","in","E","{","B","}"], "$e = new NODE.For([$a[0], $a[1], $a[2], exprToAST($a[3]), $a[4], $a[5], $a[6]]);"]
,["P5",["|","LI","|","E0"], "$e = new NODE.Closure($a[1], $a[3]);"]
,["P5",["||","E0"], "$e = new NODE.Closure([], $a[1]);"]
,["LIT",["true"], "$e = new NODE.LitBool($a[0]);"]
,["LIT",["false"], "$e = new NODE.LitBool($a[0]);"]
,["LIT",["litchar"], "$e = new NODE.LitChar($a[0]);"]
,["LIT",["litfloat"], "$e = new NODE.LitFloat($a[0]);"]
,["LIT",["litint"], "$e = new NODE.LitInt($a[0]);"]
,["LIT",["litstr"], "$e = new NODE.LitStr($a[0]);"]
,["E1",["e"], "$e = [];"]
,["E1",["(","LE0",")","TE1","E2"], "$a[3].unshift(new NODE.CallTuple($a[1])); $a[3].unshift(new NODE.Operator(NODE.Apply, null, 2, false, 5)); $a[3] = $a[3].concat($a[4]); $e = $a[3];"]
,["E1",["!","(","LE0",")","E2"], "$a[4].unshift(new NODE.CallTuple($a[2])); $a[4].unshift(new NODE.Operator(NODE.ApplyMacro, null, 2)); $a[4].unshift(new NODE.Operator(NODE.TrailingNot, $a[0], 1)); $e = $a[4];"]
,["E1",["=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",["+=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",["-=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",["*=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",["/=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",["%=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",["^=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",["&=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",["|=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",["<<=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",[">>=","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, true)); $e = $a[1];"]
,["E1",["E3"], "$e = $a[0];"]
,["E2",["e"], "$e = [];"]
,["E2",["E3"], "$e = $a[0];"]
,["E3",["+","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2)); $e = $a[1];"]
,["E3",["-","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2)); $e = $a[1];"]
,["E3",["&&","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, false, -1)); $e = $a[1];"]
,["E3",[".","E"], "$a[1].unshift(new NODE.Operator(NODE.Property, $a[0], 2, false, 5)); $e = $a[1];"]
,["E3",["*","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2)); $e = $a[1];"]
,["E3",["&","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2)); $e = $a[1];"]
,["E3",["/","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2)); $e = $a[1];"]
,["E3",["%","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2)); $e = $a[1];"]
,["E3",["^","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2)); $e = $a[1];"]
,["E3",["|","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2)); $e = $a[1];"]
,["E3",["<<","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2)); $e = $a[1];"]
,["E3",[">>","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2)); $e = $a[1];"]
,["E3",["<","E"], "$a[1].unshift(new NODE.Operator(NODE.CmpOp, $a[0], 2)); $e = $a[1];"]
,["E3",["<=","E"], "$a[1].unshift(new NODE.Operator(NODE.CmpOp, $a[0], 2)); $e = $a[1];"]
,["E3",["==","E"], "$a[1].unshift(new NODE.Operator(NODE.CmpOp, $a[0], 2)); $e = $a[1];"]
,["E3",["!=","E"], "$a[1].unshift(new NODE.Operator(NODE.CmpOp, $a[0], 2)); $e = $a[1];"]
,["E3",[">=","E"], "$a[1].unshift(new NODE.Operator(NODE.CmpOp, $a[0], 2)); $e = $a[1];"]
,["E3",[">","E"], "$a[1].unshift(new NODE.Operator(NODE.CmpOp, $a[0], 2)); $e = $a[1];"]
,["E3",["||","E"], "$a[1].unshift(new NODE.Operator(NODE.BinaryOp, $a[0], 2, false, -1)); $e = $a[1];"]
,["E3",["as","TY"], "$e = [new NODE.Operator(NODE.As, $a[0], 2), $a[1]];"]
,["E4",["{","SV","}"], "$e = [new NODE.Operator(NODE.Struct, $a[1], 1)];"] // acts as trailing unary operator
,["E4",["E1"], "$e = $a[0];"]
,["TE1",["e"], "$e = [];"]
,["TE1",["(","LE0",")","TE1"], "$a[3].unshift(new NODE.CallTuple($a[1])); $a[3].unshift(new NODE.Operator(NODE.Apply, null, 2, false, 5)); $e = $a[3];"]
,["U",["-"], "$e = new NODE.Operator(NODE.UnaryOp, $a[0], 1, true);"]
,["U",["!"], "$e = new NODE.Operator(NODE.UnaryOp, $a[0], 1, true);"]
,["U",["&","TM"], "$e = null;"]
,["U",["*","TM"], "$e = null;"]
,["U",["~","TM"], "$e = null;"]
,["U",["@","TM"], "$e = null;"]
,["W1",["U","W1"], "if ($a[0] !== null) $a[1].unshift($a[0]); $e = $a[1];"]
,["W1",["P1","E1"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["W1",["P2","E2"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["W1",["P3","E2"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["W2",["U","W2"], "if ($a[0] !== null) $a[1].unshift($a[0]); $e = $a[1];"]
,["W2",["P1","E4"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["W2",["P2","E2"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["W2",["P3","E2"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["BE",["U","W2"], "if ($a[0] !== null) $a[1].unshift($a[0]); $e = new NODE.LastExpr(exprToAST($a[1]));"]
,["BE",["P1","E4"], "$a[1].unshift($a[0]); $e = new NODE.LastExpr(exprToAST($a[1]));"]
,["BE",["P2","E2"], "$a[1].unshift($a[0]); $e = new NODE.LastExpr(exprToAST($a[1]));"]
,["BE",["P5"], "$e = new NODE.LastExpr($a[0]);"]
,["BE",["return","QE0"], "$e = new NODE.LastStmt(new NODE.Return($a));"]
,["BE",["break"], "$e = new NODE.LastStmt(new NODE.Break($a));"]
,["BE",["continue","TC"], "$e = new NODE.LastStmt(new NODE.Continue($a));"]
,["NBE",["P3"], "$e = $a[0];"]
,["NBE",["HP4","P4"], "$a[1].label = $a[0]; $e = $a[1];"]
,["QE0",["e"], "$e = null;"]
,["QE0",["E0"], "$e = $a[0];"]
,["TC",["e"], "$e = null;"]
,["TC",["lifetime"], "$e = $a[0];"]
,["HP4",["e"], "$e = null;"]
,["HP4",["lifetime",":"], "$e = $a;"]
,["E",["U","W1"], "if ($a[0] !== null) $a[1].unshift($a[0]); $e = $a[1];"]
,["E",["P1","E1"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["E",["P2","E2"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["E",["P3","E2"], "$a[1].unshift(new NODE.IfExpr($a[0])); $e = $a[1];"]
,["E",["P4"], "$e = [new NODE.IfExpr($a[0])];"]
,["E0",["U","W2"], "if ($a[0] !== null) $a[1].unshift($a[0]); $e = exprToAST($a[1]);"]
,["E0",["P1","E4"], "$a[1].unshift($a[0]); $e = exprToAST($a[1]);"]
,["E0",["P2","E2"], "$a[1].unshift($a[0]); $e = exprToAST($a[1]);"]
,["E0",["P3","E2"], "$a[1].unshift(new NODE.IfExpr($a[0])); $e = exprToAST($a[1]);"]
,["E0",["P4"], "$e = new NODE.IfExpr($a[0]);"]
,["E0",["P5"], "$e = $a[0];"]
,["TFQ",["ident"], "$e = new NODE.Ident($a[0]);"]
,["TFQ",["<","LTY",">"], "$e = $a[1];"]
,["TP1",["e"], "$e = [];"]
,["TP1",["::","TFQ","TP1"], "$a[2].unshift($a[1]); $a[2].unshift(new NODE.Operator(NODE.ModProperty, $a[0], 2, false, 5)); $e = $a[2];"]
,["LI",["e"], "$e = [];"]
,["LI",["ident","TLI"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["TLI",["e"], "$e = [];"]
,["TLI",[",","ident","TLI"], "$a[2].unshift($a[1]); $e = $a[2];"]
,["LE0",["e"], "$e = [];"]
,["LE0",["E0","TLE0"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["TLE0",["e"], "$e = [];"]
,["TLE0",[",","E0","TLE0"], "$a[2].unshift($a[1]); $e = $a[2];"]
,["SV",["e"], "$e = [];"]
,["SV",["ident",":","E0","TSV"], "$a[3].unshift([$a[0], $a[2]]); $e = $a[3];"]
,["TSV",["e"], "$e = [];"]
,["TSV",[",","SV"], "$e = $a[1];"]
,["SC",["struct","ident","GE","TSC"], "$e = new NODE.Sc($a);"]
,["TSC",["TSC1",";"], "$e = $a[0];"]
,["TSC",["{","SD","}"], "$e = $a[1];"]
,["TSC1",["e"], "$e = [];"]
,["TSC1",["(","TY","TLTY",")"], "$a[2].unshift($a[1]); $e = new NODE.Tuple($a[2]);"]
,["SD",["e"], "$e = [];"]
,["SD",["ident",":","TY","TSD"], "$a[3].unshift([$a[0], $a[2]]); $e = $a[3];"]
,["TSD",["e"], "$e = [];"]
,["TSD",[",","SD"], "$e = $a[1];"]
,["IMPL",["impl","P1","for","P1","{","LFN","}"], "$e = new NODE.Impl($a);"]
,["LFN",["e"], "$e = [];"]
,["LFN",["FN","LFN"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["TRAIT",["trait","ident","{","LFS","}"], "$e = new NODE.Trait($a);"]
,["LFS",["e"], "$e = [];"]
,["LFS",["FS","LFS"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["USE",["use","ident","TUSE",";"], "$a[2].unshift($a[1]); $e = new NODE.Use([$a[0], $a[2], $a[3]]);"]
,["TUSE",["e"], "$e = [];"]
,["TUSE",["::","TTUSE"], "$e = $a[1];"]
,["TTUSE",["*"], "throw new LocatedError('using * in `use` statements is not supported', $a[0]);"]
,["TTUSE",["{","ident","TLI","}"], "$a[2].unshift($a[1]); $e = [$a[2]];"]
,["TTUSE",["ident","TUSE"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["MOD",["mod","ident","{","B","}"], "$e = new NODE.Mod($a);"]
,["ENUM",["enum","ident","GE","{","LEN","}"], "$e = new NODE.Enum($a);"]
,["LEN",["e"], "$e = [];"]
,["LEN",["EN","TLEN"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["TLEN",["e"], "$e = [];"]
,["TLEN",[",","EN","TLEN"], "$a[2].unshift($a[1]); $e = $a[2];"]
,["EN",["ident","GE","TEN"], "$e = new NODE.Sc([null, $a[0], $a[1], $a[2]]);"]
,["TEN",["TSC1"], "$e = $a[0];"]
,["TEN",["{","SD","}"], "$e = $a[1];"]
,["DES",["_"], "$e = new NODE.DesIgnore($a[0]);"]
,["DES",["ident","TDES1","TDES"], "$a[1].unshift(new NODE.Ident($a[0])); $a[2].unshift(exprToAST($a[1])); $e = exprToAST($a[2]);"]
,["DES",["DES2"], "$e = new NODE.DesTuple($a[0]);"]
,["TDES",["e"], "$e = [new NODE.Operator(NODE.DesSingle, null, 1)];"]
,["TDES",["DES2"], "$e = [new NODE.Operator(NODE.DesTupleStruct, $a[0], 1)];"]
,["TDES",["{","DES3","}"], "$e = [new NODE.Operator(NODE.DesStruct, $a[1], 1)];"]
,["DES1",["_"], "$e = new NODE.DesIgnore($a[0]);"]
,["DES1",["ident","TDES1"], "$a[1].unshift($a[0]); $e = exprToAST($a[1]);"]
,["TDES1",["e"], "$e = [];"]
,["TDES1",["::","ident","TDES1"], "$a[2].unshift(new NODE.Ident($a[1])); $a[2].unshift(new NODE.Operator(NODE.ModProperty, $a[0], 2)); $e = $a[2];"]
,["TDES1",[".","ident","TDES1"], "throw new LocatedError('property not supported in destructuring', $a[0]);"]
,["DES2",["(","DES","TDES2",")"], "$a[2].unshift($a[1]); $e = $a[2];"]
,["TDES2",["e"], "$e = [];"]
,["TDES2",[",","DES","TDES2"], "$a[2].unshift($a[1]); $e = $a[2];"]
,["DES3",["e"], "$e = [];"]
,["DES3",["DES3_ITEM","TDES3"], "$a[1].unshift($a[0]); $e = $a[1];"]
,["TDES3",["e"], "$e = [];"]
,["TDES3",[",","DES3"], "$e = $a[1];"]
,["DES3_ITEM",["ident","TDES3_ITEM"], "$e = [$a[0], $a[1] === null ? new NODE.DesSingle(null, new NODE.Ident($a[0])) : $a[1]];"]
,["TDES3_ITEM",["e"], "$e = null;"]
,["TDES3_ITEM",[":","DES"], "$e = $a[1];"]
];
function isTerminal(x) {
return !(TABLE[x]);
}
function extractTerminalAndValue(tok) {
var map = {
PLUS: '+',
MINUS: '-',
STAR: '*',
SLASH: '/',
PERCENT: '%',
CARET: '^',
AND: '&',
OR: '|',
SHL: '<<',
SHR: '>>',
EQ: '=',
LT: '<',
LE: '<=',
EQEQ: '==',
NE: '!=',
GE: '>=',
GT: '>',
ANDAND: '&&',
OROR: '||',
NOT: '!',
TILDE: '~',
//BINOP: ?,
//BINOPEQ: ?,
AT: '@',
DOT: '.',
DOTDOT: '..',
DOTDOTDOT: '...',
COMMA: ',',
SEMI: ';',
COLON: ':',
MOD_SEP: '::',
RARROW: '->',
LARROW: '<-',
DARROW: '<=>',
FAT_ARROW: '=>',
LPAREN: '(',
RPAREN: ')',
LBRACKET: '[',
RBRACKET: ']',
LBRACE: '{',
RBRACE: '}',
POUND: '#',
DOLLAR: '$',
//LIT_CHAR: ?,
//LIT_INT: ?,
//LIT_UINT: ?,
//LIT_INT_UNSUFFIXED: ?,
//LIT_FLOAT: ?,
//LIT_FLOAT_UNSUFFIXED: ?,
//LIT_STR: ?,
//LIT_STR_RAW: ?,
UNDERSCORE: '_',
//LIFETIME: ?,
//DOC_COMMENT: ?,
//IDENT: ?,
EOF: '$'
};
var mapValue = map[tok.k];
if (tok.k === 'BINOP') {
mapValue = map[tok.v];
} else if (tok.k === 'BINOPEQ') {
mapValue = map[tok.v] + '=';
} else if (tok.k === 'IDENT' && (token.is_any_keyword(tok) && tok.v !== 'super')) { // kw except super
mapValue = tok.v;
}
if (mapValue) {
return {terminal: mapValue, value: mapValue};
}
if (tok.k === 'LIT_CHAR') {
return {terminal: 'litchar', value: JSON.stringify(String.fromCharCode(tok.v)) + ".charCodeAt(0)"};
} else if (['LIT_INT', 'LIT_UINT', 'LIT_INT_UNSUFFIXED'].indexOf(tok.k) !== -1) {
return {terminal: 'litint', value: tok.v.toString()};
} else if (['LIT_FLOAT', 'LIT_FLOAT_UNSUFFIXED'].indexOf(tok.k) !== -1) {
return {terminal: 'litfloat', value: tok.v.toString()};
} else if (['LIT_STR', 'LIT_STR_RAW'].indexOf(tok.k) !== -1) {
return {terminal: 'litstr', value: JSON.stringify(tok.v)};
} else if (tok.k === 'LIFETIME') {
return {terminal: 'lifetime', value: tok.v};
} else if (tok.k === 'IDENT') {
return {terminal: 'ident', value: tok.v};
}
throw "unsupported token " + token.toString(tok);
}
function getNextTerminalAndValue(rdr) {
string_advance_token(rdr);
if (rdr.peek_tok.k === 'DOC_COMMENT') return getNextTerminalAndValue(rdr);
if (rdr.peek_tok.k === 'IDENT' && rdr.peek_tok.v === 'ref') return getNextTerminalAndValue(rdr);
var terminalAndValue = extractTerminalAndValue(rdr.peek_tok);
if (terminalAndValue.terminal !== '$') {
terminalAndValue.lo = rdr.peek_span.lo;
terminalAndValue.hi = rdr.peek_span.hi;
terminalAndValue.token = rdr.peek_tok;
}
return terminalAndValue;
}
function getExpectedTerminal(x) {
var result = [];
for (var k in TABLE[x]) {
result.push(k);
}
return result;
}
function parse(input) {
var rdr = new_low_level_string_reader(null, {src: input, start_pos: 0, next_line: function(){}});
var stk = ['$', 'S'];
var estk = [];
var counterStk = [];
var x, y, rule;
var $e; // evaluated
var $a; // matched values
var msg, errPos; // error msg and position
y = getNextTerminalAndValue(rdr);
while (true) {
x = stk.pop();
// hack for GE (treat >> as > >)
if (y.terminal === '>>') {
// the list has non-terminals whose follow set has > but NOT >>
if (!isTerminal(x) && NT_WHOSE_FOLLOWSET_HAS_GT_NOT_SHR.indexOf(x) !== -1) {
rule = RULES[TABLE[x]['>'] - 1];
//log("applying " + rule[0] + " -> " + rule[1].join(' '));
for (var i = rule[1].length - 1; i >= 0; i--) {
stk.push(rule[1][i]);
}
if (rule.length !== 3) { throw "missing instructions for rule " + rule[0] + " -> " + rule[1].join(' '); }
counterStk.push({count: rule[1].length, i: 0, rhs: rule[1], code: rule[2]});
continue;
}
if (isTerminal(x) && y.terminal === '>>' && x === '>') {
$e = new NODE.Verbatim('>', y.lo, y.lo + 1);
estk.push($e);
counterStk[counterStk.length - 1]['i']++;
while (counterStk[counterStk.length - 1]['i'] === counterStk[counterStk.length - 1]['count']) {
$a = [];
for (var i = 0; i < counterStk[counterStk.length - 1]['count']; i++) {
$a.unshift(estk.pop());
}
if (counterStk[counterStk.length - 1]['code']) {
eval(counterStk[counterStk.length - 1]['code']);
}
counterStk.pop();
if (counterStk.length === 0) break;
estk.push($e);
counterStk[counterStk.length - 1]['i']++;
}
y = {terminal: '>', value: '>', lo: y.lo + 1, hi: y.hi}; // TODO this is too much workaround and the whole block is a repetition
continue;
}
}
if (isTerminal(x) && (x === 'e' || x === y.terminal)) {
if (x === '$' && stk.length === 0) break;
if (x === 'ident') reportIdentifier(y.value);
$e = (x === 'e') ? null : new NODE.Verbatim(y.value, y.lo, y.hi, y.token);
estk.push($e);
counterStk[counterStk.length - 1]['i']++;
while (counterStk[counterStk.length - 1]['i'] === counterStk[counterStk.length - 1]['count']) {
$a = [];
for (var i = 0; i < counterStk[counterStk.length - 1]['count']; i++) {
$a.unshift(estk.pop());
}
if (counterStk[counterStk.length - 1]['code']) {
eval(counterStk[counterStk.length - 1]['code']);
}
counterStk.pop();
if (counterStk.length === 0) break;
estk.push($e);
counterStk[counterStk.length - 1]['i']++;
}
if (x !== 'e') {
y = getNextTerminalAndValue(rdr);
}
continue;
}
if (!TABLE[x]) {
errPos = rdr.last_pos;
msg = "";
msg += "expected " + x;
if (y.terminal !== '$') {
errPos -= y.value.length;
msg += " but found `" + y.terminal + "`";
if (y.terminal !== y.value) msg += " (" + y.value + ")";
}
throw new LocatedError("Parse error: " + msg, new NODE.Verbatim(y.value, errPos, errPos + 1));
}
if (!TABLE[x][y.terminal] || TABLE[x][y.terminal].length === 0) {
errPos = rdr.last_pos;
msg = "";
if (counterStk.length > 0) {
msg += "incomplete `" + counterStk[counterStk.length - 1]['rhs'].join(' ') + "`";
} else {
msg += "expected " + getExpectedTerminal(x).join(' or ');
}
if (y.terminal !== '$') {
errPos -= y.value.length;
msg += "; found `" + y.terminal + "`";
if (y.terminal !== y.value) msg += " (" + y.value + ")";
}
throw new LocatedError("Parse error: " + msg, new NODE.Verbatim(y.value, errPos, errPos + 1));
}
if (TABLE[x][y.terminal].length > 1) {
throw 'not an LL1 parser';
}
rule = RULES[TABLE[x][y.terminal] - 1];
//log("applying " + rule[0] + " -> " + rule[1].join(' '));
for (var i = rule[1].length - 1; i >= 0; i--) {
stk.push(rule[1][i]);
}
if (rule.length !== 3) { throw "missing instructions for rule " + rule[0] + " -> " + rule[1].join(' '); }
counterStk.push({count: rule[1].length, i: 0, rhs: rule[1], code: rule[2]});
}
//log('parsed successfully');
return $e;
}