parser: Add 'fun' and 'var'-as-attr keyword
[nit.git] / src / parser / lexer.nit
1 # Lexer and its tokens.
2 # This file was generated by SableCC (http://www.sablecc.org/).
3 package lexer
4
5 import parser_nodes
6
7 redef class Token
8 readable writable attr _text: String
9 readable attr _filename: String
10 readable attr _line: Int
11 readable attr _pos: Int
12
13 meth parser_index: Int is abstract
14
15 redef meth to_s: String do
16 return "'{_text}'"
17 end
18 end
19
20 redef class TEol
21 redef meth parser_index: Int
22 do
23 return 0
24 end
25
26 init init_tk(text: String, fname: String, line: Int, pos: Int)
27 do
28 _text = text
29 _filename = fname
30 _line = line
31 _pos = pos
32 end
33 end
34
35 redef class TComment
36 redef meth parser_index: Int
37 do
38 return 1
39 end
40
41 init init_tk(text: String, fname: String, line: Int, pos: Int)
42 do
43 _text = text
44 _filename = fname
45 _line = line
46 _pos = pos
47 end
48 end
49
50 redef class TKwpackage
51 redef meth parser_index: Int
52 do
53 return 2
54 end
55
56 init init_tk(fname: String, line: Int, pos: Int)
57 do
58 _text = once "package"
59 _filename = fname
60 _line = line
61 _pos = pos
62 end
63 end
64
65 redef class TKwimport
66 redef meth parser_index: Int
67 do
68 return 3
69 end
70
71 init init_tk(fname: String, line: Int, pos: Int)
72 do
73 _text = once "import"
74 _filename = fname
75 _line = line
76 _pos = pos
77 end
78 end
79
80 redef class TKwclass
81 redef meth parser_index: Int
82 do
83 return 4
84 end
85
86 init init_tk(fname: String, line: Int, pos: Int)
87 do
88 _text = once "class"
89 _filename = fname
90 _line = line
91 _pos = pos
92 end
93 end
94
95 redef class TKwabstract
96 redef meth parser_index: Int
97 do
98 return 5
99 end
100
101 init init_tk(fname: String, line: Int, pos: Int)
102 do
103 _text = once "abstract"
104 _filename = fname
105 _line = line
106 _pos = pos
107 end
108 end
109
110 redef class TKwinterface
111 redef meth parser_index: Int
112 do
113 return 6
114 end
115
116 init init_tk(fname: String, line: Int, pos: Int)
117 do
118 _text = once "interface"
119 _filename = fname
120 _line = line
121 _pos = pos
122 end
123 end
124
125 redef class TKwuniversal
126 redef meth parser_index: Int
127 do
128 return 7
129 end
130
131 init init_tk(fname: String, line: Int, pos: Int)
132 do
133 _text = once "universal"
134 _filename = fname
135 _line = line
136 _pos = pos
137 end
138 end
139
140 redef class TKwspecial
141 redef meth parser_index: Int
142 do
143 return 8
144 end
145
146 init init_tk(fname: String, line: Int, pos: Int)
147 do
148 _text = once "special"
149 _filename = fname
150 _line = line
151 _pos = pos
152 end
153 end
154
155 redef class TKwend
156 redef meth parser_index: Int
157 do
158 return 9
159 end
160
161 init init_tk(fname: String, line: Int, pos: Int)
162 do
163 _text = once "end"
164 _filename = fname
165 _line = line
166 _pos = pos
167 end
168 end
169
170 redef class TKwmeth
171 redef meth parser_index: Int
172 do
173 return 10
174 end
175
176 init init_tk(text: String, fname: String, line: Int, pos: Int)
177 do
178 _text = text
179 _filename = fname
180 _line = line
181 _pos = pos
182 end
183 end
184
185 redef class TKwtype
186 redef meth parser_index: Int
187 do
188 return 11
189 end
190
191 init init_tk(fname: String, line: Int, pos: Int)
192 do
193 _text = once "type"
194 _filename = fname
195 _line = line
196 _pos = pos
197 end
198 end
199
200 redef class TKwattr
201 redef meth parser_index: Int
202 do
203 return 12
204 end
205
206 init init_tk(fname: String, line: Int, pos: Int)
207 do
208 _text = once "attr"
209 _filename = fname
210 _line = line
211 _pos = pos
212 end
213 end
214
215 redef class TKwinit
216 redef meth parser_index: Int
217 do
218 return 13
219 end
220
221 init init_tk(fname: String, line: Int, pos: Int)
222 do
223 _text = once "init"
224 _filename = fname
225 _line = line
226 _pos = pos
227 end
228 end
229
230 redef class TKwredef
231 redef meth parser_index: Int
232 do
233 return 14
234 end
235
236 init init_tk(fname: String, line: Int, pos: Int)
237 do
238 _text = once "redef"
239 _filename = fname
240 _line = line
241 _pos = pos
242 end
243 end
244
245 redef class TKwis
246 redef meth parser_index: Int
247 do
248 return 15
249 end
250
251 init init_tk(fname: String, line: Int, pos: Int)
252 do
253 _text = once "is"
254 _filename = fname
255 _line = line
256 _pos = pos
257 end
258 end
259
260 redef class TKwdo
261 redef meth parser_index: Int
262 do
263 return 16
264 end
265
266 init init_tk(fname: String, line: Int, pos: Int)
267 do
268 _text = once "do"
269 _filename = fname
270 _line = line
271 _pos = pos
272 end
273 end
274
275 redef class TKwreadable
276 redef meth parser_index: Int
277 do
278 return 17
279 end
280
281 init init_tk(fname: String, line: Int, pos: Int)
282 do
283 _text = once "readable"
284 _filename = fname
285 _line = line
286 _pos = pos
287 end
288 end
289
290 redef class TKwwritable
291 redef meth parser_index: Int
292 do
293 return 18
294 end
295
296 init init_tk(fname: String, line: Int, pos: Int)
297 do
298 _text = once "writable"
299 _filename = fname
300 _line = line
301 _pos = pos
302 end
303 end
304
305 redef class TKwvar
306 redef meth parser_index: Int
307 do
308 return 19
309 end
310
311 init init_tk(fname: String, line: Int, pos: Int)
312 do
313 _text = once "var"
314 _filename = fname
315 _line = line
316 _pos = pos
317 end
318 end
319
320 redef class TKwintern
321 redef meth parser_index: Int
322 do
323 return 20
324 end
325
326 init init_tk(fname: String, line: Int, pos: Int)
327 do
328 _text = once "intern"
329 _filename = fname
330 _line = line
331 _pos = pos
332 end
333 end
334
335 redef class TKwextern
336 redef meth parser_index: Int
337 do
338 return 21
339 end
340
341 init init_tk(fname: String, line: Int, pos: Int)
342 do
343 _text = once "extern"
344 _filename = fname
345 _line = line
346 _pos = pos
347 end
348 end
349
350 redef class TKwprotected
351 redef meth parser_index: Int
352 do
353 return 22
354 end
355
356 init init_tk(fname: String, line: Int, pos: Int)
357 do
358 _text = once "protected"
359 _filename = fname
360 _line = line
361 _pos = pos
362 end
363 end
364
365 redef class TKwprivate
366 redef meth parser_index: Int
367 do
368 return 23
369 end
370
371 init init_tk(fname: String, line: Int, pos: Int)
372 do
373 _text = once "private"
374 _filename = fname
375 _line = line
376 _pos = pos
377 end
378 end
379
380 redef class TKwintrude
381 redef meth parser_index: Int
382 do
383 return 24
384 end
385
386 init init_tk(fname: String, line: Int, pos: Int)
387 do
388 _text = once "intrude"
389 _filename = fname
390 _line = line
391 _pos = pos
392 end
393 end
394
395 redef class TKwif
396 redef meth parser_index: Int
397 do
398 return 25
399 end
400
401 init init_tk(fname: String, line: Int, pos: Int)
402 do
403 _text = once "if"
404 _filename = fname
405 _line = line
406 _pos = pos
407 end
408 end
409
410 redef class TKwthen
411 redef meth parser_index: Int
412 do
413 return 26
414 end
415
416 init init_tk(fname: String, line: Int, pos: Int)
417 do
418 _text = once "then"
419 _filename = fname
420 _line = line
421 _pos = pos
422 end
423 end
424
425 redef class TKwelse
426 redef meth parser_index: Int
427 do
428 return 27
429 end
430
431 init init_tk(fname: String, line: Int, pos: Int)
432 do
433 _text = once "else"
434 _filename = fname
435 _line = line
436 _pos = pos
437 end
438 end
439
440 redef class TKwwhile
441 redef meth parser_index: Int
442 do
443 return 28
444 end
445
446 init init_tk(fname: String, line: Int, pos: Int)
447 do
448 _text = once "while"
449 _filename = fname
450 _line = line
451 _pos = pos
452 end
453 end
454
455 redef class TKwfor
456 redef meth parser_index: Int
457 do
458 return 29
459 end
460
461 init init_tk(fname: String, line: Int, pos: Int)
462 do
463 _text = once "for"
464 _filename = fname
465 _line = line
466 _pos = pos
467 end
468 end
469
470 redef class TKwin
471 redef meth parser_index: Int
472 do
473 return 30
474 end
475
476 init init_tk(fname: String, line: Int, pos: Int)
477 do
478 _text = once "in"
479 _filename = fname
480 _line = line
481 _pos = pos
482 end
483 end
484
485 redef class TKwand
486 redef meth parser_index: Int
487 do
488 return 31
489 end
490
491 init init_tk(fname: String, line: Int, pos: Int)
492 do
493 _text = once "and"
494 _filename = fname
495 _line = line
496 _pos = pos
497 end
498 end
499
500 redef class TKwor
501 redef meth parser_index: Int
502 do
503 return 32
504 end
505
506 init init_tk(fname: String, line: Int, pos: Int)
507 do
508 _text = once "or"
509 _filename = fname
510 _line = line
511 _pos = pos
512 end
513 end
514
515 redef class TKwnot
516 redef meth parser_index: Int
517 do
518 return 33
519 end
520
521 init init_tk(fname: String, line: Int, pos: Int)
522 do
523 _text = once "not"
524 _filename = fname
525 _line = line
526 _pos = pos
527 end
528 end
529
530 redef class TKwreturn
531 redef meth parser_index: Int
532 do
533 return 34
534 end
535
536 init init_tk(fname: String, line: Int, pos: Int)
537 do
538 _text = once "return"
539 _filename = fname
540 _line = line
541 _pos = pos
542 end
543 end
544
545 redef class TKwcontinue
546 redef meth parser_index: Int
547 do
548 return 35
549 end
550
551 init init_tk(fname: String, line: Int, pos: Int)
552 do
553 _text = once "continue"
554 _filename = fname
555 _line = line
556 _pos = pos
557 end
558 end
559
560 redef class TKwbreak
561 redef meth parser_index: Int
562 do
563 return 36
564 end
565
566 init init_tk(fname: String, line: Int, pos: Int)
567 do
568 _text = once "break"
569 _filename = fname
570 _line = line
571 _pos = pos
572 end
573 end
574
575 redef class TKwabort
576 redef meth parser_index: Int
577 do
578 return 37
579 end
580
581 init init_tk(fname: String, line: Int, pos: Int)
582 do
583 _text = once "abort"
584 _filename = fname
585 _line = line
586 _pos = pos
587 end
588 end
589
590 redef class TKwassert
591 redef meth parser_index: Int
592 do
593 return 38
594 end
595
596 init init_tk(fname: String, line: Int, pos: Int)
597 do
598 _text = once "assert"
599 _filename = fname
600 _line = line
601 _pos = pos
602 end
603 end
604
605 redef class TKwnew
606 redef meth parser_index: Int
607 do
608 return 39
609 end
610
611 init init_tk(fname: String, line: Int, pos: Int)
612 do
613 _text = once "new"
614 _filename = fname
615 _line = line
616 _pos = pos
617 end
618 end
619
620 redef class TKwisa
621 redef meth parser_index: Int
622 do
623 return 40
624 end
625
626 init init_tk(fname: String, line: Int, pos: Int)
627 do
628 _text = once "isa"
629 _filename = fname
630 _line = line
631 _pos = pos
632 end
633 end
634
635 redef class TKwonce
636 redef meth parser_index: Int
637 do
638 return 41
639 end
640
641 init init_tk(fname: String, line: Int, pos: Int)
642 do
643 _text = once "once"
644 _filename = fname
645 _line = line
646 _pos = pos
647 end
648 end
649
650 redef class TKwsuper
651 redef meth parser_index: Int
652 do
653 return 42
654 end
655
656 init init_tk(fname: String, line: Int, pos: Int)
657 do
658 _text = once "super"
659 _filename = fname
660 _line = line
661 _pos = pos
662 end
663 end
664
665 redef class TKwself
666 redef meth parser_index: Int
667 do
668 return 43
669 end
670
671 init init_tk(fname: String, line: Int, pos: Int)
672 do
673 _text = once "self"
674 _filename = fname
675 _line = line
676 _pos = pos
677 end
678 end
679
680 redef class TKwtrue
681 redef meth parser_index: Int
682 do
683 return 44
684 end
685
686 init init_tk(fname: String, line: Int, pos: Int)
687 do
688 _text = once "true"
689 _filename = fname
690 _line = line
691 _pos = pos
692 end
693 end
694
695 redef class TKwfalse
696 redef meth parser_index: Int
697 do
698 return 45
699 end
700
701 init init_tk(fname: String, line: Int, pos: Int)
702 do
703 _text = once "false"
704 _filename = fname
705 _line = line
706 _pos = pos
707 end
708 end
709
710 redef class TKwnull
711 redef meth parser_index: Int
712 do
713 return 46
714 end
715
716 init init_tk(fname: String, line: Int, pos: Int)
717 do
718 _text = once "null"
719 _filename = fname
720 _line = line
721 _pos = pos
722 end
723 end
724
725 redef class TKwas
726 redef meth parser_index: Int
727 do
728 return 47
729 end
730
731 init init_tk(fname: String, line: Int, pos: Int)
732 do
733 _text = once "as"
734 _filename = fname
735 _line = line
736 _pos = pos
737 end
738 end
739
740 redef class TKwwith
741 redef meth parser_index: Int
742 do
743 return 48
744 end
745
746 init init_tk(fname: String, line: Int, pos: Int)
747 do
748 _text = once "with"
749 _filename = fname
750 _line = line
751 _pos = pos
752 end
753 end
754
755 redef class TOpar
756 redef meth parser_index: Int
757 do
758 return 49
759 end
760
761 init init_tk(fname: String, line: Int, pos: Int)
762 do
763 _text = once "("
764 _filename = fname
765 _line = line
766 _pos = pos
767 end
768 end
769
770 redef class TCpar
771 redef meth parser_index: Int
772 do
773 return 50
774 end
775
776 init init_tk(fname: String, line: Int, pos: Int)
777 do
778 _text = once ")"
779 _filename = fname
780 _line = line
781 _pos = pos
782 end
783 end
784
785 redef class TObra
786 redef meth parser_index: Int
787 do
788 return 51
789 end
790
791 init init_tk(fname: String, line: Int, pos: Int)
792 do
793 _text = once "["
794 _filename = fname
795 _line = line
796 _pos = pos
797 end
798 end
799
800 redef class TCbra
801 redef meth parser_index: Int
802 do
803 return 52
804 end
805
806 init init_tk(fname: String, line: Int, pos: Int)
807 do
808 _text = once "]"
809 _filename = fname
810 _line = line
811 _pos = pos
812 end
813 end
814
815 redef class TComma
816 redef meth parser_index: Int
817 do
818 return 53
819 end
820
821 init init_tk(fname: String, line: Int, pos: Int)
822 do
823 _text = once ","
824 _filename = fname
825 _line = line
826 _pos = pos
827 end
828 end
829
830 redef class TColumn
831 redef meth parser_index: Int
832 do
833 return 54
834 end
835
836 init init_tk(fname: String, line: Int, pos: Int)
837 do
838 _text = once ":"
839 _filename = fname
840 _line = line
841 _pos = pos
842 end
843 end
844
845 redef class TQuad
846 redef meth parser_index: Int
847 do
848 return 55
849 end
850
851 init init_tk(fname: String, line: Int, pos: Int)
852 do
853 _text = once "::"
854 _filename = fname
855 _line = line
856 _pos = pos
857 end
858 end
859
860 redef class TAssign
861 redef meth parser_index: Int
862 do
863 return 56
864 end
865
866 init init_tk(fname: String, line: Int, pos: Int)
867 do
868 _text = once "="
869 _filename = fname
870 _line = line
871 _pos = pos
872 end
873 end
874
875 redef class TPluseq
876 redef meth parser_index: Int
877 do
878 return 57
879 end
880
881 init init_tk(fname: String, line: Int, pos: Int)
882 do
883 _text = once "+="
884 _filename = fname
885 _line = line
886 _pos = pos
887 end
888 end
889
890 redef class TMinuseq
891 redef meth parser_index: Int
892 do
893 return 58
894 end
895
896 init init_tk(fname: String, line: Int, pos: Int)
897 do
898 _text = once "-="
899 _filename = fname
900 _line = line
901 _pos = pos
902 end
903 end
904
905 redef class TDotdotdot
906 redef meth parser_index: Int
907 do
908 return 59
909 end
910
911 init init_tk(fname: String, line: Int, pos: Int)
912 do
913 _text = once "..."
914 _filename = fname
915 _line = line
916 _pos = pos
917 end
918 end
919
920 redef class TDotdot
921 redef meth parser_index: Int
922 do
923 return 60
924 end
925
926 init init_tk(fname: String, line: Int, pos: Int)
927 do
928 _text = once ".."
929 _filename = fname
930 _line = line
931 _pos = pos
932 end
933 end
934
935 redef class TDot
936 redef meth parser_index: Int
937 do
938 return 61
939 end
940
941 init init_tk(fname: String, line: Int, pos: Int)
942 do
943 _text = once "."
944 _filename = fname
945 _line = line
946 _pos = pos
947 end
948 end
949
950 redef class TPlus
951 redef meth parser_index: Int
952 do
953 return 62
954 end
955
956 init init_tk(fname: String, line: Int, pos: Int)
957 do
958 _text = once "+"
959 _filename = fname
960 _line = line
961 _pos = pos
962 end
963 end
964
965 redef class TMinus
966 redef meth parser_index: Int
967 do
968 return 63
969 end
970
971 init init_tk(fname: String, line: Int, pos: Int)
972 do
973 _text = once "-"
974 _filename = fname
975 _line = line
976 _pos = pos
977 end
978 end
979
980 redef class TStar
981 redef meth parser_index: Int
982 do
983 return 64
984 end
985
986 init init_tk(fname: String, line: Int, pos: Int)
987 do
988 _text = once "*"
989 _filename = fname
990 _line = line
991 _pos = pos
992 end
993 end
994
995 redef class TSlash
996 redef meth parser_index: Int
997 do
998 return 65
999 end
1000
1001 init init_tk(fname: String, line: Int, pos: Int)
1002 do
1003 _text = once "/"
1004 _filename = fname
1005 _line = line
1006 _pos = pos
1007 end
1008 end
1009
1010 redef class TPercent
1011 redef meth parser_index: Int
1012 do
1013 return 66
1014 end
1015
1016 init init_tk(fname: String, line: Int, pos: Int)
1017 do
1018 _text = once "%"
1019 _filename = fname
1020 _line = line
1021 _pos = pos
1022 end
1023 end
1024
1025 redef class TEq
1026 redef meth parser_index: Int
1027 do
1028 return 67
1029 end
1030
1031 init init_tk(fname: String, line: Int, pos: Int)
1032 do
1033 _text = once "=="
1034 _filename = fname
1035 _line = line
1036 _pos = pos
1037 end
1038 end
1039
1040 redef class TNe
1041 redef meth parser_index: Int
1042 do
1043 return 68
1044 end
1045
1046 init init_tk(fname: String, line: Int, pos: Int)
1047 do
1048 _text = once "!="
1049 _filename = fname
1050 _line = line
1051 _pos = pos
1052 end
1053 end
1054
1055 redef class TLt
1056 redef meth parser_index: Int
1057 do
1058 return 69
1059 end
1060
1061 init init_tk(fname: String, line: Int, pos: Int)
1062 do
1063 _text = once "<"
1064 _filename = fname
1065 _line = line
1066 _pos = pos
1067 end
1068 end
1069
1070 redef class TLe
1071 redef meth parser_index: Int
1072 do
1073 return 70
1074 end
1075
1076 init init_tk(fname: String, line: Int, pos: Int)
1077 do
1078 _text = once "<="
1079 _filename = fname
1080 _line = line
1081 _pos = pos
1082 end
1083 end
1084
1085 redef class TGt
1086 redef meth parser_index: Int
1087 do
1088 return 71
1089 end
1090
1091 init init_tk(fname: String, line: Int, pos: Int)
1092 do
1093 _text = once ">"
1094 _filename = fname
1095 _line = line
1096 _pos = pos
1097 end
1098 end
1099
1100 redef class TGe
1101 redef meth parser_index: Int
1102 do
1103 return 72
1104 end
1105
1106 init init_tk(fname: String, line: Int, pos: Int)
1107 do
1108 _text = once ">="
1109 _filename = fname
1110 _line = line
1111 _pos = pos
1112 end
1113 end
1114
1115 redef class TStarship
1116 redef meth parser_index: Int
1117 do
1118 return 73
1119 end
1120
1121 init init_tk(fname: String, line: Int, pos: Int)
1122 do
1123 _text = once "<=>"
1124 _filename = fname
1125 _line = line
1126 _pos = pos
1127 end
1128 end
1129
1130 redef class TClassid
1131 redef meth parser_index: Int
1132 do
1133 return 74
1134 end
1135
1136 init init_tk(text: String, fname: String, line: Int, pos: Int)
1137 do
1138 _text = text
1139 _filename = fname
1140 _line = line
1141 _pos = pos
1142 end
1143 end
1144
1145 redef class TId
1146 redef meth parser_index: Int
1147 do
1148 return 75
1149 end
1150
1151 init init_tk(text: String, fname: String, line: Int, pos: Int)
1152 do
1153 _text = text
1154 _filename = fname
1155 _line = line
1156 _pos = pos
1157 end
1158 end
1159
1160 redef class TAttrid
1161 redef meth parser_index: Int
1162 do
1163 return 76
1164 end
1165
1166 init init_tk(text: String, fname: String, line: Int, pos: Int)
1167 do
1168 _text = text
1169 _filename = fname
1170 _line = line
1171 _pos = pos
1172 end
1173 end
1174
1175 redef class TNumber
1176 redef meth parser_index: Int
1177 do
1178 return 77
1179 end
1180
1181 init init_tk(text: String, fname: String, line: Int, pos: Int)
1182 do
1183 _text = text
1184 _filename = fname
1185 _line = line
1186 _pos = pos
1187 end
1188 end
1189
1190 redef class TFloat
1191 redef meth parser_index: Int
1192 do
1193 return 78
1194 end
1195
1196 init init_tk(text: String, fname: String, line: Int, pos: Int)
1197 do
1198 _text = text
1199 _filename = fname
1200 _line = line
1201 _pos = pos
1202 end
1203 end
1204
1205 redef class TChar
1206 redef meth parser_index: Int
1207 do
1208 return 79
1209 end
1210
1211 init init_tk(text: String, fname: String, line: Int, pos: Int)
1212 do
1213 _text = text
1214 _filename = fname
1215 _line = line
1216 _pos = pos
1217 end
1218 end
1219
1220 redef class TString
1221 redef meth parser_index: Int
1222 do
1223 return 80
1224 end
1225
1226 init init_tk(text: String, fname: String, line: Int, pos: Int)
1227 do
1228 _text = text
1229 _filename = fname
1230 _line = line
1231 _pos = pos
1232 end
1233 end
1234
1235 redef class TStartString
1236 redef meth parser_index: Int
1237 do
1238 return 81
1239 end
1240
1241 init init_tk(text: String, fname: String, line: Int, pos: Int)
1242 do
1243 _text = text
1244 _filename = fname
1245 _line = line
1246 _pos = pos
1247 end
1248 end
1249
1250 redef class TMidString
1251 redef meth parser_index: Int
1252 do
1253 return 82
1254 end
1255
1256 init init_tk(text: String, fname: String, line: Int, pos: Int)
1257 do
1258 _text = text
1259 _filename = fname
1260 _line = line
1261 _pos = pos
1262 end
1263 end
1264
1265 redef class TEndString
1266 redef meth parser_index: Int
1267 do
1268 return 83
1269 end
1270
1271 init init_tk(text: String, fname: String, line: Int, pos: Int)
1272 do
1273 _text = text
1274 _filename = fname
1275 _line = line
1276 _pos = pos
1277 end
1278 end
1279
1280
1281 redef class EOF
1282 redef meth parser_index: Int
1283 do
1284 return 84
1285 end
1286
1287 init(fname: String, line: Int, pos: Int)
1288 do
1289 _filename = fname
1290 _text = ""
1291 _line = line
1292 _pos = pos
1293 end
1294 end
1295
1296 redef class PError
1297 readable writable attr _message: String
1298
1299 init init_error(fname: String, line: Int, pos: Int, message: String)
1300 do
1301 init(fname, line, pos)
1302 _message = message
1303 end
1304 end
1305
1306
1307 # The lexer extract NIT tokens from an input stream.
1308 # It is better user with the Parser
1309 class Lexer
1310 # Last peeked token
1311 attr _token: Token
1312
1313 # Lexer current state
1314 attr _state: Int = 0
1315
1316 # Name of the stream (as given to tokens)
1317 readable attr _filename: String
1318
1319 # Input stream where character are read
1320 attr _stream: IStream
1321
1322 # Pushback buffer to store unread character
1323 attr _stream_buf: Buffer
1324
1325 # Number of character stored in the pushback buffer
1326 attr _stream_pos: Int
1327
1328 # Current line number in the input stream
1329 attr _line: Int = 0
1330
1331 # Current column in the input stream
1332 attr _pos: Int = 0
1333
1334 # Was the last character a cariage-return?
1335 attr _cr: Bool = false
1336
1337 # If the end of stream?
1338 attr _eof: Bool = false
1339
1340 # Current working text read from the input stream
1341 attr _text: Buffer
1342
1343 # Constante state values
1344 private meth state_initial: Int do return 0 end
1345
1346 # Create a new lexer for a stream (and a name)
1347 init(stream: IStream, fname: String)
1348 do
1349 _filename = fname
1350 _text = new Buffer
1351 _stream = stream
1352 _stream_pos = -1
1353 _stream_buf = new Buffer
1354 build_goto_table
1355 build_accept_table
1356 end
1357
1358 # Give the next token (but do not consume it)
1359 meth peek: Token
1360 do
1361 while _token == null do
1362 _token = get_token
1363 end
1364 return _token
1365 end
1366
1367 # Give and consume the next token
1368 meth next: Token
1369 do
1370 var result = _token
1371 while result == null do
1372 result = get_token
1373 end
1374 _token = null
1375 return result
1376 end
1377
1378 # Get a token, or null if it is discarded
1379 private meth get_token: Token
1380 do
1381 var dfa_state = 0
1382
1383 var start_pos = _pos
1384 var start_line = _line
1385
1386 var accept_state = -1
1387 var accept_token = -1
1388 var accept_length = -1
1389 var accept_pos = -1
1390 var accept_line = -1
1391
1392 var goto_table = _goto_table[_state]
1393 var accept = _accept_table[_state]
1394 _text.clear
1395
1396 while true do
1397 var c = get_char
1398
1399 if c != -1 then
1400 if c == 10 then
1401 if _cr then
1402 _cr = false
1403 else
1404 _line = _line + 1
1405 _pos = 0
1406 end
1407 else if c == 13 then
1408 _line = _line + 1
1409 _pos = 0
1410 _cr = true
1411 else
1412 _pos = _pos + 1
1413 _cr = false
1414 end
1415
1416 _text.add(c.ascii)
1417
1418 var first_loop = true # aka until
1419 while dfa_state < -1 or first_loop do
1420 var old_state = dfa_state
1421 if dfa_state < -1 then
1422 old_state = -2 - dfa_state
1423 end
1424
1425 dfa_state = -1
1426
1427 var tmp1 = goto_table[old_state]
1428 var low = 0
1429 var high = tmp1.length - 1
1430
1431 while low <= high do
1432 var middle = (low + high) / 2
1433 var tmp2 = tmp1[middle]
1434
1435 if c < tmp2[0] then
1436 high = middle - 1
1437 else if c > tmp2[1] then
1438 low = middle + 1
1439 else
1440 dfa_state = tmp2[2]
1441 low = high + 1 # aka break
1442 end
1443 end
1444 first_loop = false # aka until
1445 end
1446 else
1447 dfa_state = -1
1448 end
1449
1450 if dfa_state >= 0 then
1451 if accept[dfa_state] != -1 then
1452 accept_state = dfa_state
1453 accept_token = accept[dfa_state]
1454 accept_length = _text.length
1455 accept_pos = _pos
1456 accept_line = _line
1457 end
1458 else
1459 if accept_state != -1 then
1460 if accept_token == 0 then
1461 push_back(accept_length)
1462 _pos = accept_pos
1463 _line = accept_line
1464 return null
1465 end
1466 if accept_token == 1 then
1467 var token_text = _text.substring(0, accept_length)
1468 var token = new TEol.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1469 push_back(accept_length)
1470 _pos = accept_pos
1471 _line = accept_line
1472 return token
1473 end
1474 if accept_token == 2 then
1475 var token_text = _text.substring(0, accept_length)
1476 var token = new TComment.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1477 push_back(accept_length)
1478 _pos = accept_pos
1479 _line = accept_line
1480 return token
1481 end
1482 if accept_token == 3 then
1483 var token = new TKwpackage.init_tk(_filename, start_line + 1, start_pos + 1)
1484 push_back(accept_length)
1485 _pos = accept_pos
1486 _line = accept_line
1487 return token
1488 end
1489 if accept_token == 4 then
1490 var token = new TKwimport.init_tk(_filename, start_line + 1, start_pos + 1)
1491 push_back(accept_length)
1492 _pos = accept_pos
1493 _line = accept_line
1494 return token
1495 end
1496 if accept_token == 5 then
1497 var token = new TKwclass.init_tk(_filename, start_line + 1, start_pos + 1)
1498 push_back(accept_length)
1499 _pos = accept_pos
1500 _line = accept_line
1501 return token
1502 end
1503 if accept_token == 6 then
1504 var token = new TKwabstract.init_tk(_filename, start_line + 1, start_pos + 1)
1505 push_back(accept_length)
1506 _pos = accept_pos
1507 _line = accept_line
1508 return token
1509 end
1510 if accept_token == 7 then
1511 var token = new TKwinterface.init_tk(_filename, start_line + 1, start_pos + 1)
1512 push_back(accept_length)
1513 _pos = accept_pos
1514 _line = accept_line
1515 return token
1516 end
1517 if accept_token == 8 then
1518 var token = new TKwuniversal.init_tk(_filename, start_line + 1, start_pos + 1)
1519 push_back(accept_length)
1520 _pos = accept_pos
1521 _line = accept_line
1522 return token
1523 end
1524 if accept_token == 9 then
1525 var token = new TKwspecial.init_tk(_filename, start_line + 1, start_pos + 1)
1526 push_back(accept_length)
1527 _pos = accept_pos
1528 _line = accept_line
1529 return token
1530 end
1531 if accept_token == 10 then
1532 var token = new TKwend.init_tk(_filename, start_line + 1, start_pos + 1)
1533 push_back(accept_length)
1534 _pos = accept_pos
1535 _line = accept_line
1536 return token
1537 end
1538 if accept_token == 11 then
1539 var token_text = _text.substring(0, accept_length)
1540 var token = new TKwmeth.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1541 push_back(accept_length)
1542 _pos = accept_pos
1543 _line = accept_line
1544 return token
1545 end
1546 if accept_token == 12 then
1547 var token = new TKwtype.init_tk(_filename, start_line + 1, start_pos + 1)
1548 push_back(accept_length)
1549 _pos = accept_pos
1550 _line = accept_line
1551 return token
1552 end
1553 if accept_token == 13 then
1554 var token = new TKwattr.init_tk(_filename, start_line + 1, start_pos + 1)
1555 push_back(accept_length)
1556 _pos = accept_pos
1557 _line = accept_line
1558 return token
1559 end
1560 if accept_token == 14 then
1561 var token = new TKwinit.init_tk(_filename, start_line + 1, start_pos + 1)
1562 push_back(accept_length)
1563 _pos = accept_pos
1564 _line = accept_line
1565 return token
1566 end
1567 if accept_token == 15 then
1568 var token = new TKwredef.init_tk(_filename, start_line + 1, start_pos + 1)
1569 push_back(accept_length)
1570 _pos = accept_pos
1571 _line = accept_line
1572 return token
1573 end
1574 if accept_token == 16 then
1575 var token = new TKwis.init_tk(_filename, start_line + 1, start_pos + 1)
1576 push_back(accept_length)
1577 _pos = accept_pos
1578 _line = accept_line
1579 return token
1580 end
1581 if accept_token == 17 then
1582 var token = new TKwdo.init_tk(_filename, start_line + 1, start_pos + 1)
1583 push_back(accept_length)
1584 _pos = accept_pos
1585 _line = accept_line
1586 return token
1587 end
1588 if accept_token == 18 then
1589 var token = new TKwreadable.init_tk(_filename, start_line + 1, start_pos + 1)
1590 push_back(accept_length)
1591 _pos = accept_pos
1592 _line = accept_line
1593 return token
1594 end
1595 if accept_token == 19 then
1596 var token = new TKwwritable.init_tk(_filename, start_line + 1, start_pos + 1)
1597 push_back(accept_length)
1598 _pos = accept_pos
1599 _line = accept_line
1600 return token
1601 end
1602 if accept_token == 20 then
1603 var token = new TKwvar.init_tk(_filename, start_line + 1, start_pos + 1)
1604 push_back(accept_length)
1605 _pos = accept_pos
1606 _line = accept_line
1607 return token
1608 end
1609 if accept_token == 21 then
1610 var token = new TKwintern.init_tk(_filename, start_line + 1, start_pos + 1)
1611 push_back(accept_length)
1612 _pos = accept_pos
1613 _line = accept_line
1614 return token
1615 end
1616 if accept_token == 22 then
1617 var token = new TKwextern.init_tk(_filename, start_line + 1, start_pos + 1)
1618 push_back(accept_length)
1619 _pos = accept_pos
1620 _line = accept_line
1621 return token
1622 end
1623 if accept_token == 23 then
1624 var token = new TKwprotected.init_tk(_filename, start_line + 1, start_pos + 1)
1625 push_back(accept_length)
1626 _pos = accept_pos
1627 _line = accept_line
1628 return token
1629 end
1630 if accept_token == 24 then
1631 var token = new TKwprivate.init_tk(_filename, start_line + 1, start_pos + 1)
1632 push_back(accept_length)
1633 _pos = accept_pos
1634 _line = accept_line
1635 return token
1636 end
1637 if accept_token == 25 then
1638 var token = new TKwintrude.init_tk(_filename, start_line + 1, start_pos + 1)
1639 push_back(accept_length)
1640 _pos = accept_pos
1641 _line = accept_line
1642 return token
1643 end
1644 if accept_token == 26 then
1645 var token = new TKwif.init_tk(_filename, start_line + 1, start_pos + 1)
1646 push_back(accept_length)
1647 _pos = accept_pos
1648 _line = accept_line
1649 return token
1650 end
1651 if accept_token == 27 then
1652 var token = new TKwthen.init_tk(_filename, start_line + 1, start_pos + 1)
1653 push_back(accept_length)
1654 _pos = accept_pos
1655 _line = accept_line
1656 return token
1657 end
1658 if accept_token == 28 then
1659 var token = new TKwelse.init_tk(_filename, start_line + 1, start_pos + 1)
1660 push_back(accept_length)
1661 _pos = accept_pos
1662 _line = accept_line
1663 return token
1664 end
1665 if accept_token == 29 then
1666 var token = new TKwwhile.init_tk(_filename, start_line + 1, start_pos + 1)
1667 push_back(accept_length)
1668 _pos = accept_pos
1669 _line = accept_line
1670 return token
1671 end
1672 if accept_token == 30 then
1673 var token = new TKwfor.init_tk(_filename, start_line + 1, start_pos + 1)
1674 push_back(accept_length)
1675 _pos = accept_pos
1676 _line = accept_line
1677 return token
1678 end
1679 if accept_token == 31 then
1680 var token = new TKwin.init_tk(_filename, start_line + 1, start_pos + 1)
1681 push_back(accept_length)
1682 _pos = accept_pos
1683 _line = accept_line
1684 return token
1685 end
1686 if accept_token == 32 then
1687 var token = new TKwand.init_tk(_filename, start_line + 1, start_pos + 1)
1688 push_back(accept_length)
1689 _pos = accept_pos
1690 _line = accept_line
1691 return token
1692 end
1693 if accept_token == 33 then
1694 var token = new TKwor.init_tk(_filename, start_line + 1, start_pos + 1)
1695 push_back(accept_length)
1696 _pos = accept_pos
1697 _line = accept_line
1698 return token
1699 end
1700 if accept_token == 34 then
1701 var token = new TKwnot.init_tk(_filename, start_line + 1, start_pos + 1)
1702 push_back(accept_length)
1703 _pos = accept_pos
1704 _line = accept_line
1705 return token
1706 end
1707 if accept_token == 35 then
1708 var token = new TKwreturn.init_tk(_filename, start_line + 1, start_pos + 1)
1709 push_back(accept_length)
1710 _pos = accept_pos
1711 _line = accept_line
1712 return token
1713 end
1714 if accept_token == 36 then
1715 var token = new TKwcontinue.init_tk(_filename, start_line + 1, start_pos + 1)
1716 push_back(accept_length)
1717 _pos = accept_pos
1718 _line = accept_line
1719 return token
1720 end
1721 if accept_token == 37 then
1722 var token = new TKwbreak.init_tk(_filename, start_line + 1, start_pos + 1)
1723 push_back(accept_length)
1724 _pos = accept_pos
1725 _line = accept_line
1726 return token
1727 end
1728 if accept_token == 38 then
1729 var token = new TKwabort.init_tk(_filename, start_line + 1, start_pos + 1)
1730 push_back(accept_length)
1731 _pos = accept_pos
1732 _line = accept_line
1733 return token
1734 end
1735 if accept_token == 39 then
1736 var token = new TKwassert.init_tk(_filename, start_line + 1, start_pos + 1)
1737 push_back(accept_length)
1738 _pos = accept_pos
1739 _line = accept_line
1740 return token
1741 end
1742 if accept_token == 40 then
1743 var token = new TKwnew.init_tk(_filename, start_line + 1, start_pos + 1)
1744 push_back(accept_length)
1745 _pos = accept_pos
1746 _line = accept_line
1747 return token
1748 end
1749 if accept_token == 41 then
1750 var token = new TKwisa.init_tk(_filename, start_line + 1, start_pos + 1)
1751 push_back(accept_length)
1752 _pos = accept_pos
1753 _line = accept_line
1754 return token
1755 end
1756 if accept_token == 42 then
1757 var token = new TKwonce.init_tk(_filename, start_line + 1, start_pos + 1)
1758 push_back(accept_length)
1759 _pos = accept_pos
1760 _line = accept_line
1761 return token
1762 end
1763 if accept_token == 43 then
1764 var token = new TKwsuper.init_tk(_filename, start_line + 1, start_pos + 1)
1765 push_back(accept_length)
1766 _pos = accept_pos
1767 _line = accept_line
1768 return token
1769 end
1770 if accept_token == 44 then
1771 var token = new TKwself.init_tk(_filename, start_line + 1, start_pos + 1)
1772 push_back(accept_length)
1773 _pos = accept_pos
1774 _line = accept_line
1775 return token
1776 end
1777 if accept_token == 45 then
1778 var token = new TKwtrue.init_tk(_filename, start_line + 1, start_pos + 1)
1779 push_back(accept_length)
1780 _pos = accept_pos
1781 _line = accept_line
1782 return token
1783 end
1784 if accept_token == 46 then
1785 var token = new TKwfalse.init_tk(_filename, start_line + 1, start_pos + 1)
1786 push_back(accept_length)
1787 _pos = accept_pos
1788 _line = accept_line
1789 return token
1790 end
1791 if accept_token == 47 then
1792 var token = new TKwnull.init_tk(_filename, start_line + 1, start_pos + 1)
1793 push_back(accept_length)
1794 _pos = accept_pos
1795 _line = accept_line
1796 return token
1797 end
1798 if accept_token == 48 then
1799 var token = new TKwas.init_tk(_filename, start_line + 1, start_pos + 1)
1800 push_back(accept_length)
1801 _pos = accept_pos
1802 _line = accept_line
1803 return token
1804 end
1805 if accept_token == 49 then
1806 var token = new TKwwith.init_tk(_filename, start_line + 1, start_pos + 1)
1807 push_back(accept_length)
1808 _pos = accept_pos
1809 _line = accept_line
1810 return token
1811 end
1812 if accept_token == 50 then
1813 var token = new TOpar.init_tk(_filename, start_line + 1, start_pos + 1)
1814 push_back(accept_length)
1815 _pos = accept_pos
1816 _line = accept_line
1817 return token
1818 end
1819 if accept_token == 51 then
1820 var token = new TCpar.init_tk(_filename, start_line + 1, start_pos + 1)
1821 push_back(accept_length)
1822 _pos = accept_pos
1823 _line = accept_line
1824 return token
1825 end
1826 if accept_token == 52 then
1827 var token = new TObra.init_tk(_filename, start_line + 1, start_pos + 1)
1828 push_back(accept_length)
1829 _pos = accept_pos
1830 _line = accept_line
1831 return token
1832 end
1833 if accept_token == 53 then
1834 var token = new TCbra.init_tk(_filename, start_line + 1, start_pos + 1)
1835 push_back(accept_length)
1836 _pos = accept_pos
1837 _line = accept_line
1838 return token
1839 end
1840 if accept_token == 54 then
1841 var token = new TComma.init_tk(_filename, start_line + 1, start_pos + 1)
1842 push_back(accept_length)
1843 _pos = accept_pos
1844 _line = accept_line
1845 return token
1846 end
1847 if accept_token == 55 then
1848 var token = new TColumn.init_tk(_filename, start_line + 1, start_pos + 1)
1849 push_back(accept_length)
1850 _pos = accept_pos
1851 _line = accept_line
1852 return token
1853 end
1854 if accept_token == 56 then
1855 var token = new TQuad.init_tk(_filename, start_line + 1, start_pos + 1)
1856 push_back(accept_length)
1857 _pos = accept_pos
1858 _line = accept_line
1859 return token
1860 end
1861 if accept_token == 57 then
1862 var token = new TAssign.init_tk(_filename, start_line + 1, start_pos + 1)
1863 push_back(accept_length)
1864 _pos = accept_pos
1865 _line = accept_line
1866 return token
1867 end
1868 if accept_token == 58 then
1869 var token = new TPluseq.init_tk(_filename, start_line + 1, start_pos + 1)
1870 push_back(accept_length)
1871 _pos = accept_pos
1872 _line = accept_line
1873 return token
1874 end
1875 if accept_token == 59 then
1876 var token = new TMinuseq.init_tk(_filename, start_line + 1, start_pos + 1)
1877 push_back(accept_length)
1878 _pos = accept_pos
1879 _line = accept_line
1880 return token
1881 end
1882 if accept_token == 60 then
1883 var token = new TDotdotdot.init_tk(_filename, start_line + 1, start_pos + 1)
1884 push_back(accept_length)
1885 _pos = accept_pos
1886 _line = accept_line
1887 return token
1888 end
1889 if accept_token == 61 then
1890 var token = new TDotdot.init_tk(_filename, start_line + 1, start_pos + 1)
1891 push_back(accept_length)
1892 _pos = accept_pos
1893 _line = accept_line
1894 return token
1895 end
1896 if accept_token == 62 then
1897 var token = new TDot.init_tk(_filename, start_line + 1, start_pos + 1)
1898 push_back(accept_length)
1899 _pos = accept_pos
1900 _line = accept_line
1901 return token
1902 end
1903 if accept_token == 63 then
1904 var token = new TPlus.init_tk(_filename, start_line + 1, start_pos + 1)
1905 push_back(accept_length)
1906 _pos = accept_pos
1907 _line = accept_line
1908 return token
1909 end
1910 if accept_token == 64 then
1911 var token = new TMinus.init_tk(_filename, start_line + 1, start_pos + 1)
1912 push_back(accept_length)
1913 _pos = accept_pos
1914 _line = accept_line
1915 return token
1916 end
1917 if accept_token == 65 then
1918 var token = new TStar.init_tk(_filename, start_line + 1, start_pos + 1)
1919 push_back(accept_length)
1920 _pos = accept_pos
1921 _line = accept_line
1922 return token
1923 end
1924 if accept_token == 66 then
1925 var token = new TSlash.init_tk(_filename, start_line + 1, start_pos + 1)
1926 push_back(accept_length)
1927 _pos = accept_pos
1928 _line = accept_line
1929 return token
1930 end
1931 if accept_token == 67 then
1932 var token = new TPercent.init_tk(_filename, start_line + 1, start_pos + 1)
1933 push_back(accept_length)
1934 _pos = accept_pos
1935 _line = accept_line
1936 return token
1937 end
1938 if accept_token == 68 then
1939 var token = new TEq.init_tk(_filename, start_line + 1, start_pos + 1)
1940 push_back(accept_length)
1941 _pos = accept_pos
1942 _line = accept_line
1943 return token
1944 end
1945 if accept_token == 69 then
1946 var token = new TNe.init_tk(_filename, start_line + 1, start_pos + 1)
1947 push_back(accept_length)
1948 _pos = accept_pos
1949 _line = accept_line
1950 return token
1951 end
1952 if accept_token == 70 then
1953 var token = new TLt.init_tk(_filename, start_line + 1, start_pos + 1)
1954 push_back(accept_length)
1955 _pos = accept_pos
1956 _line = accept_line
1957 return token
1958 end
1959 if accept_token == 71 then
1960 var token = new TLe.init_tk(_filename, start_line + 1, start_pos + 1)
1961 push_back(accept_length)
1962 _pos = accept_pos
1963 _line = accept_line
1964 return token
1965 end
1966 if accept_token == 72 then
1967 var token = new TGt.init_tk(_filename, start_line + 1, start_pos + 1)
1968 push_back(accept_length)
1969 _pos = accept_pos
1970 _line = accept_line
1971 return token
1972 end
1973 if accept_token == 73 then
1974 var token = new TGe.init_tk(_filename, start_line + 1, start_pos + 1)
1975 push_back(accept_length)
1976 _pos = accept_pos
1977 _line = accept_line
1978 return token
1979 end
1980 if accept_token == 74 then
1981 var token = new TStarship.init_tk(_filename, start_line + 1, start_pos + 1)
1982 push_back(accept_length)
1983 _pos = accept_pos
1984 _line = accept_line
1985 return token
1986 end
1987 if accept_token == 75 then
1988 var token_text = _text.substring(0, accept_length)
1989 var token = new TClassid.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1990 push_back(accept_length)
1991 _pos = accept_pos
1992 _line = accept_line
1993 return token
1994 end
1995 if accept_token == 76 then
1996 var token_text = _text.substring(0, accept_length)
1997 var token = new TId.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1998 push_back(accept_length)
1999 _pos = accept_pos
2000 _line = accept_line
2001 return token
2002 end
2003 if accept_token == 77 then
2004 var token_text = _text.substring(0, accept_length)
2005 var token = new TAttrid.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2006 push_back(accept_length)
2007 _pos = accept_pos
2008 _line = accept_line
2009 return token
2010 end
2011 if accept_token == 78 then
2012 var token_text = _text.substring(0, accept_length)
2013 var token = new TNumber.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2014 push_back(accept_length)
2015 _pos = accept_pos
2016 _line = accept_line
2017 return token
2018 end
2019 if accept_token == 79 then
2020 var token_text = _text.substring(0, accept_length)
2021 var token = new TFloat.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2022 push_back(accept_length)
2023 _pos = accept_pos
2024 _line = accept_line
2025 return token
2026 end
2027 if accept_token == 80 then
2028 var token_text = _text.substring(0, accept_length)
2029 var token = new TChar.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2030 push_back(accept_length)
2031 _pos = accept_pos
2032 _line = accept_line
2033 return token
2034 end
2035 if accept_token == 81 then
2036 var token_text = _text.substring(0, accept_length)
2037 var token = new TString.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2038 push_back(accept_length)
2039 _pos = accept_pos
2040 _line = accept_line
2041 return token
2042 end
2043 if accept_token == 82 then
2044 var token_text = _text.substring(0, accept_length)
2045 var token = new TStartString.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2046 push_back(accept_length)
2047 _pos = accept_pos
2048 _line = accept_line
2049 return token
2050 end
2051 if accept_token == 83 then
2052 var token_text = _text.substring(0, accept_length)
2053 var token = new TMidString.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2054 push_back(accept_length)
2055 _pos = accept_pos
2056 _line = accept_line
2057 return token
2058 end
2059 if accept_token == 84 then
2060 var token_text = _text.substring(0, accept_length)
2061 var token = new TEndString.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2062 push_back(accept_length)
2063 _pos = accept_pos
2064 _line = accept_line
2065 return token
2066 end
2067 else
2068 if _text.length > 0 then
2069 var token = new PError.init_error(_filename, start_line + 1, start_pos + 1, "Unknown token: {_text}")
2070 return token
2071 else
2072 var token = new EOF(_filename, start_line + 1, start_pos + 1)
2073 return token
2074 end
2075 end
2076 end
2077 end
2078 return null
2079 end
2080
2081 # Read the next character.
2082 # The character is read from the stream of from the pushback buffer.
2083 private meth get_char: Int
2084 do
2085 if _eof then
2086 return -1
2087 end
2088
2089 var result: Int
2090
2091 var sp = _stream_pos
2092 if sp >= 0 then
2093 var res = _stream_buf[_stream_pos]
2094 _stream_pos = sp - 1
2095 result = res.ascii
2096 else
2097 result = _stream.read_char
2098 end
2099
2100 if result == -1 then
2101 _eof = true
2102 end
2103
2104 return result
2105 end
2106
2107 # Unread some characters.
2108 # Unread characters are stored in the pushback buffer.
2109 private meth push_back(accept_length: Int)
2110 do
2111 var length = _text.length
2112 var i = length - 1
2113 while i >= accept_length do
2114 _eof = false
2115 _stream_pos = _stream_pos + 1
2116 _stream_buf[_stream_pos] = _text[i]
2117 i = i - 1
2118 end
2119 end
2120
2121 attr _goto_table: Array[Array[Array[Array[Int]]]]
2122 private meth build_goto_table
2123 do
2124 _goto_table = once [
2125 [
2126 [
2127 [9, 9, 1] ,
2128 [10, 10, 2] ,
2129 [13, 13, 3] ,
2130 [32, 32, 4] ,
2131 [33, 33, 5] ,
2132 [34, 34, 6] ,
2133 [35, 35, 7] ,
2134 [37, 37, 8] ,
2135 [39, 39, 9] ,
2136 [40, 40, 10] ,
2137 [41, 41, 11] ,
2138 [42, 42, 12] ,
2139 [43, 43, 13] ,
2140 [44, 44, 14] ,
2141 [45, 45, 15] ,
2142 [46, 46, 16] ,
2143 [47, 47, 17] ,
2144 [48, 57, 18] ,
2145 [58, 58, 19] ,
2146 [60, 60, 20] ,
2147 [61, 61, 21] ,
2148 [62, 62, 22] ,
2149 [65, 90, 23] ,
2150 [91, 91, 24] ,
2151 [93, 93, 25] ,
2152 [95, 95, 26] ,
2153 [97, 97, 27] ,
2154 [98, 98, 28] ,
2155 [99, 99, 29] ,
2156 [100, 100, 30] ,
2157 [101, 101, 31] ,
2158 [102, 102, 32] ,
2159 [103, 104, 33] ,
2160 [105, 105, 34] ,
2161 [106, 108, 33] ,
2162 [109, 109, 35] ,
2163 [110, 110, 36] ,
2164 [111, 111, 37] ,
2165 [112, 112, 38] ,
2166 [113, 113, 33] ,
2167 [114, 114, 39] ,
2168 [115, 115, 40] ,
2169 [116, 116, 41] ,
2170 [117, 117, 42] ,
2171 [118, 118, 43] ,
2172 [119, 119, 44] ,
2173 [120, 122, 33] ,
2174 [125, 125, 45]
2175 ] ,
2176 [
2177 [9, 9, 1] ,
2178 [32, 32, 4]
2179 ] ,
2180 nil_array ,
2181 [
2182 [10, 10, 46]
2183 ] ,
2184 [
2185 [9, 32, -3]
2186 ] ,
2187 [
2188 [61, 61, 47]
2189 ] ,
2190 [
2191 [0, 9, 48] ,
2192 [11, 12, 48] ,
2193 [14, 33, 48] ,
2194 [34, 34, 49] ,
2195 [35, 91, 48] ,
2196 [92, 92, 50] ,
2197 [93, 122, 48] ,
2198 [123, 123, 51] ,
2199 [124, 255, 48]
2200 ] ,
2201 [
2202 [0, 9, 52] ,
2203 [10, 10, 53] ,
2204 [11, 12, 52] ,
2205 [13, 13, 54] ,
2206 [14, 255, 52]
2207 ] ,
2208 nil_array ,
2209 [
2210 [0, 9, 55] ,
2211 [11, 12, 55] ,
2212 [14, 38, 55] ,
2213 [39, 39, 56] ,
2214 [40, 255, 55]
2215 ] ,
2216 nil_array ,
2217 nil_array ,
2218 nil_array ,
2219 [
2220 [61, 61, 57]
2221 ] ,
2222 nil_array ,
2223 [
2224 [61, 61, 58]
2225 ] ,
2226 [
2227 [46, 46, 59] ,
2228 [48, 57, 60]
2229 ] ,
2230 nil_array ,
2231 [
2232 [46, 46, 61] ,
2233 [48, 57, 18]
2234 ] ,
2235 [
2236 [58, 58, 62]
2237 ] ,
2238 [
2239 [61, 61, 63]
2240 ] ,
2241 [
2242 [61, 61, 64]
2243 ] ,
2244 [
2245 [61, 61, 65]
2246 ] ,
2247 [
2248 [48, 57, 66] ,
2249 [65, 90, 67] ,
2250 [95, 95, 68] ,
2251 [97, 122, 69]
2252 ] ,
2253 nil_array ,
2254 nil_array ,
2255 [
2256 [97, 122, 70]
2257 ] ,
2258 [
2259 [48, 57, 71] ,
2260 [65, 90, 72] ,
2261 [95, 95, 73] ,
2262 [97, 97, 74] ,
2263 [98, 98, 75] ,
2264 [99, 109, 74] ,
2265 [110, 110, 76] ,
2266 [111, 114, 74] ,
2267 [115, 115, 77] ,
2268 [116, 116, 78] ,
2269 [117, 122, 74]
2270 ] ,
2271 [
2272 [48, 95, -29] ,
2273 [97, 113, 74] ,
2274 [114, 114, 79] ,
2275 [115, 122, 74]
2276 ] ,
2277 [
2278 [48, 95, -29] ,
2279 [97, 107, 74] ,
2280 [108, 108, 80] ,
2281 [109, 110, 74] ,
2282 [111, 111, 81] ,
2283 [112, 122, 74]
2284 ] ,
2285 [
2286 [48, 95, -29] ,
2287 [97, 110, 74] ,
2288 [111, 111, 82] ,
2289 [112, 122, 74]
2290 ] ,
2291 [
2292 [48, 107, -31] ,
2293 [108, 108, 83] ,
2294 [109, 109, 74] ,
2295 [110, 110, 84] ,
2296 [111, 119, 74] ,
2297 [120, 120, 85] ,
2298 [121, 122, 74]
2299 ] ,
2300 [
2301 [48, 95, -29] ,
2302 [97, 97, 86] ,
2303 [98, 110, 74] ,
2304 [111, 111, 87] ,
2305 [112, 116, 74] ,
2306 [117, 117, 88] ,
2307 [118, 122, 74]
2308 ] ,
2309 [
2310 [48, 95, -29] ,
2311 [97, 122, 74]
2312 ] ,
2313 [
2314 [48, 95, -29] ,
2315 [97, 101, 74] ,
2316 [102, 102, 89] ,
2317 [103, 108, 74] ,
2318 [109, 109, 90] ,
2319 [110, 110, 91] ,
2320 [111, 114, 74] ,
2321 [115, 115, 92] ,
2322 [116, 122, 74]
2323 ] ,
2324 [
2325 [48, 95, -29] ,
2326 [97, 100, 74] ,
2327 [101, 101, 93] ,
2328 [102, 122, 74]
2329 ] ,
2330 [
2331 [48, 100, -37] ,
2332 [101, 101, 94] ,
2333 [102, 110, 74] ,
2334 [111, 111, 95] ,
2335 [112, 116, 74] ,
2336 [117, 117, 96] ,
2337 [118, 122, 74]
2338 ] ,
2339 [
2340 [48, 95, -29] ,
2341 [97, 109, 74] ,
2342 [110, 110, 97] ,
2343 [111, 113, 74] ,
2344 [114, 114, 98] ,
2345 [115, 122, 74]
2346 ] ,
2347 [
2348 [48, 95, -29] ,
2349 [97, 97, 99] ,
2350 [98, 113, 74] ,
2351 [114, 114, 100] ,
2352 [115, 122, 74]
2353 ] ,
2354 [
2355 [48, 100, -37] ,
2356 [101, 101, 101] ,
2357 [102, 122, 74]
2358 ] ,
2359 [
2360 [48, 100, -37] ,
2361 [101, 101, 102] ,
2362 [102, 111, 74] ,
2363 [112, 112, 103] ,
2364 [113, 116, 74] ,
2365 [117, 117, 104] ,
2366 [118, 122, 74]
2367 ] ,
2368 [
2369 [48, 95, -29] ,
2370 [97, 103, 74] ,
2371 [104, 104, 105] ,
2372 [105, 113, 74] ,
2373 [114, 114, 106] ,
2374 [115, 120, 74] ,
2375 [121, 121, 107] ,
2376 [122, 122, 74]
2377 ] ,
2378 [
2379 [48, 109, -39] ,
2380 [110, 110, 108] ,
2381 [111, 122, 74]
2382 ] ,
2383 [
2384 [48, 95, -29] ,
2385 [97, 97, 109] ,
2386 [98, 122, 74]
2387 ] ,
2388 [
2389 [48, 103, -43] ,
2390 [104, 104, 110] ,
2391 [105, 105, 111] ,
2392 [106, 113, 74] ,
2393 [114, 114, 112] ,
2394 [115, 122, 74]
2395 ] ,
2396 [
2397 [0, 9, 113] ,
2398 [11, 12, 113] ,
2399 [14, 33, 113] ,
2400 [34, 34, 114] ,
2401 [35, 91, 113] ,
2402 [92, 92, 115] ,
2403 [93, 122, 113] ,
2404 [123, 123, 116] ,
2405 [124, 255, 113]
2406 ] ,
2407 nil_array ,
2408 nil_array ,
2409 [
2410 [0, 255, -8]
2411 ] ,
2412 nil_array ,
2413 [
2414 [0, 9, 117] ,
2415 [11, 12, 117] ,
2416 [14, 255, 117]
2417 ] ,
2418 nil_array ,
2419 [
2420 [0, 255, -9]
2421 ] ,
2422 nil_array ,
2423 [
2424 [10, 10, 118]
2425 ] ,
2426 [
2427 [0, 255, -11]
2428 ] ,
2429 nil_array ,
2430 nil_array ,
2431 nil_array ,
2432 [
2433 [46, 46, 119]
2434 ] ,
2435 [
2436 [48, 57, 60]
2437 ] ,
2438 [
2439 [48, 57, 60]
2440 ] ,
2441 nil_array ,
2442 [
2443 [62, 62, 120]
2444 ] ,
2445 nil_array ,
2446 nil_array ,
2447 [
2448 [48, 122, -25]
2449 ] ,
2450 [
2451 [48, 122, -25]
2452 ] ,
2453 [
2454 [48, 122, -25]
2455 ] ,
2456 [
2457 [48, 122, -25]
2458 ] ,
2459 [
2460 [48, 57, 121] ,
2461 [65, 90, 122] ,
2462 [95, 95, 123] ,
2463 [97, 122, 124]
2464 ] ,
2465 [
2466 [48, 122, -35]
2467 ] ,
2468 [
2469 [48, 122, -35]
2470 ] ,
2471 [
2472 [48, 122, -35]
2473 ] ,
2474 [
2475 [48, 122, -35]
2476 ] ,
2477 [
2478 [48, 110, -32] ,
2479 [111, 111, 125] ,
2480 [112, 114, 74] ,
2481 [115, 115, 126] ,
2482 [116, 122, 74]
2483 ] ,
2484 [
2485 [48, 95, -29] ,
2486 [97, 99, 74] ,
2487 [100, 100, 127] ,
2488 [101, 122, 74]
2489 ] ,
2490 [
2491 [48, 95, -29] ,
2492 [97, 114, 74] ,
2493 [115, 115, 128] ,
2494 [116, 122, 74]
2495 ] ,
2496 [
2497 [48, 95, -29] ,
2498 [97, 115, 74] ,
2499 [116, 116, 129] ,
2500 [117, 122, 74]
2501 ] ,
2502 [
2503 [48, 100, -37] ,
2504 [101, 101, 130] ,
2505 [102, 122, 74]
2506 ] ,
2507 [
2508 [48, 95, -29] ,
2509 [97, 97, 131] ,
2510 [98, 122, 74]
2511 ] ,
2512 [
2513 [48, 109, -39] ,
2514 [110, 110, 132] ,
2515 [111, 122, 74]
2516 ] ,
2517 [
2518 [48, 122, -35]
2519 ] ,
2520 [
2521 [48, 114, -79] ,
2522 [115, 115, 133] ,
2523 [116, 122, 74]
2524 ] ,
2525 [
2526 [48, 99, -78] ,
2527 [100, 100, 134] ,
2528 [101, 122, 74]
2529 ] ,
2530 [
2531 [48, 115, -80] ,
2532 [116, 116, 135] ,
2533 [117, 122, 74]
2534 ] ,
2535 [
2536 [48, 107, -31] ,
2537 [108, 108, 136] ,
2538 [109, 122, 74]
2539 ] ,
2540 [
2541 [48, 113, -30] ,
2542 [114, 114, 137] ,
2543 [115, 122, 74]
2544 ] ,
2545 [
2546 [48, 109, -39] ,
2547 [110, 110, 138] ,
2548 [111, 122, 74]
2549 ] ,
2550 [
2551 [48, 122, -35]
2552 ] ,
2553 [
2554 [48, 95, -29] ,
2555 [97, 111, 74] ,
2556 [112, 112, 139] ,
2557 [113, 122, 74]
2558 ] ,
2559 [
2560 [48, 95, -29] ,
2561 [97, 104, 74] ,
2562 [105, 105, 140] ,
2563 [106, 115, 74] ,
2564 [116, 116, 141] ,
2565 [117, 122, 74]
2566 ] ,
2567 [
2568 [48, 95, -29] ,
2569 [97, 97, 142] ,
2570 [98, 122, 74]
2571 ] ,
2572 [
2573 [48, 115, -80] ,
2574 [116, 116, 143] ,
2575 [117, 122, 74]
2576 ] ,
2577 [
2578 [48, 95, -29] ,
2579 [97, 118, 74] ,
2580 [119, 119, 144] ,
2581 [120, 122, 74]
2582 ] ,
2583 [
2584 [48, 115, -80] ,
2585 [116, 116, 145] ,
2586 [117, 122, 74]
2587 ] ,
2588 [
2589 [48, 107, -31] ,
2590 [108, 108, 146] ,
2591 [109, 122, 74]
2592 ] ,
2593 [
2594 [48, 95, -29] ,
2595 [97, 98, 74] ,
2596 [99, 99, 147] ,
2597 [100, 122, 74]
2598 ] ,
2599 [
2600 [48, 122, -35]
2601 ] ,
2602 [
2603 [48, 98, -99] ,
2604 [99, 99, 148] ,
2605 [100, 122, 74]
2606 ] ,
2607 [
2608 [48, 104, -93] ,
2609 [105, 105, 149] ,
2610 [106, 110, 74] ,
2611 [111, 111, 150] ,
2612 [112, 122, 74]
2613 ] ,
2614 [
2615 [48, 95, -29] ,
2616 [97, 97, 151] ,
2617 [98, 99, 74] ,
2618 [100, 100, 152] ,
2619 [101, 115, 74] ,
2620 [116, 116, 153] ,
2621 [117, 122, 74]
2622 ] ,
2623 [
2624 [48, 107, -31] ,
2625 [108, 108, 154] ,
2626 [109, 122, 74]
2627 ] ,
2628 [
2629 [48, 100, -37] ,
2630 [101, 101, 155] ,
2631 [102, 122, 74]
2632 ] ,
2633 [
2634 [48, 111, -92] ,
2635 [112, 112, 156] ,
2636 [113, 122, 74]
2637 ] ,
2638 [
2639 [48, 100, -37] ,
2640 [101, 101, 157] ,
2641 [102, 122, 74]
2642 ] ,
2643 [
2644 [48, 95, -29] ,
2645 [97, 116, 74] ,
2646 [117, 117, 158] ,
2647 [118, 122, 74]
2648 ] ,
2649 [
2650 [48, 111, -92] ,
2651 [112, 112, 159] ,
2652 [113, 122, 74]
2653 ] ,
2654 [
2655 [48, 104, -93] ,
2656 [105, 105, 160] ,
2657 [106, 122, 74]
2658 ] ,
2659 [
2660 [48, 113, -30] ,
2661 [114, 114, 161] ,
2662 [115, 122, 74]
2663 ] ,
2664 [
2665 [48, 104, -93] ,
2666 [105, 105, 162] ,
2667 [106, 122, 74]
2668 ] ,
2669 [
2670 [48, 115, -80] ,
2671 [116, 116, 163] ,
2672 [117, 122, 74]
2673 ] ,
2674 [
2675 [48, 104, -93] ,
2676 [105, 105, 164] ,
2677 [106, 122, 74]
2678 ] ,
2679 [
2680 [0, 255, -47]
2681 ] ,
2682 nil_array ,
2683 [
2684 [0, 9, 165] ,
2685 [11, 12, 165] ,
2686 [14, 255, 165]
2687 ] ,
2688 nil_array ,
2689 [
2690 [0, 255, -8]
2691 ] ,
2692 nil_array ,
2693 nil_array ,
2694 nil_array ,
2695 [
2696 [48, 122, -72]
2697 ] ,
2698 [
2699 [48, 122, -72]
2700 ] ,
2701 [
2702 [48, 122, -72]
2703 ] ,
2704 [
2705 [48, 122, -72]
2706 ] ,
2707 [
2708 [48, 113, -30] ,
2709 [114, 114, 166] ,
2710 [115, 122, 74]
2711 ] ,
2712 [
2713 [48, 115, -80] ,
2714 [116, 116, 167] ,
2715 [117, 122, 74]
2716 ] ,
2717 [
2718 [48, 122, -35]
2719 ] ,
2720 [
2721 [48, 100, -37] ,
2722 [101, 101, 168] ,
2723 [102, 122, 74]
2724 ] ,
2725 [
2726 [48, 113, -30] ,
2727 [114, 114, 169] ,
2728 [115, 122, 74]
2729 ] ,
2730 [
2731 [48, 95, -29] ,
2732 [97, 97, 170] ,
2733 [98, 122, 74]
2734 ] ,
2735 [
2736 [48, 114, -79] ,
2737 [115, 115, 171] ,
2738 [116, 122, 74]
2739 ] ,
2740 [
2741 [48, 115, -80] ,
2742 [116, 116, 172] ,
2743 [117, 122, 74]
2744 ] ,
2745 [
2746 [48, 100, -37] ,
2747 [101, 101, 173] ,
2748 [102, 122, 74]
2749 ] ,
2750 [
2751 [48, 122, -35]
2752 ] ,
2753 [
2754 [48, 100, -37] ,
2755 [101, 101, 174] ,
2756 [102, 122, 74]
2757 ] ,
2758 [
2759 [48, 114, -79] ,
2760 [115, 115, 175] ,
2761 [116, 122, 74]
2762 ] ,
2763 [
2764 [48, 122, -35]
2765 ] ,
2766 [
2767 [48, 122, -35]
2768 ] ,
2769 [
2770 [48, 110, -32] ,
2771 [111, 111, 176] ,
2772 [112, 122, 74]
2773 ] ,
2774 [
2775 [48, 115, -80] ,
2776 [116, 116, 177] ,
2777 [117, 122, 74]
2778 ] ,
2779 [
2780 [48, 100, -37] ,
2781 [101, 101, 178] ,
2782 [102, 113, 74] ,
2783 [114, 114, 179] ,
2784 [115, 122, 74]
2785 ] ,
2786 [
2787 [48, 122, -35]
2788 ] ,
2789 [
2790 [48, 103, -43] ,
2791 [104, 104, 180] ,
2792 [105, 122, 74]
2793 ] ,
2794 [
2795 [48, 122, -35]
2796 ] ,
2797 [
2798 [48, 122, -35]
2799 ] ,
2800 [
2801 [48, 107, -31] ,
2802 [108, 108, 181] ,
2803 [109, 122, 74]
2804 ] ,
2805 [
2806 [48, 100, -37] ,
2807 [101, 101, 182] ,
2808 [102, 122, 74]
2809 ] ,
2810 [
2811 [48, 95, -29] ,
2812 [97, 106, 74] ,
2813 [107, 107, 183] ,
2814 [108, 122, 74]
2815 ] ,
2816 [
2817 [48, 95, -29] ,
2818 [97, 117, 74] ,
2819 [118, 118, 184] ,
2820 [119, 122, 74]
2821 ] ,
2822 [
2823 [48, 115, -80] ,
2824 [116, 116, 185] ,
2825 [117, 122, 74]
2826 ] ,
2827 [
2828 [48, 99, -78] ,
2829 [100, 100, 186] ,
2830 [101, 122, 74]
2831 ] ,
2832 [
2833 [48, 100, -37] ,
2834 [101, 101, 187] ,
2835 [102, 122, 74]
2836 ] ,
2837 [
2838 [48, 116, -108] ,
2839 [117, 117, 188] ,
2840 [118, 122, 74]
2841 ] ,
2842 [
2843 [48, 101, -36] ,
2844 [102, 102, 189] ,
2845 [103, 122, 74]
2846 ] ,
2847 [
2848 [48, 98, -99] ,
2849 [99, 99, 190] ,
2850 [100, 122, 74]
2851 ] ,
2852 [
2853 [48, 100, -37] ,
2854 [101, 101, 191] ,
2855 [102, 122, 74]
2856 ] ,
2857 [
2858 [48, 109, -39] ,
2859 [110, 110, 192] ,
2860 [111, 122, 74]
2861 ] ,
2862 [
2863 [48, 100, -37] ,
2864 [101, 101, 193] ,
2865 [102, 122, 74]
2866 ] ,
2867 [
2868 [48, 100, -37] ,
2869 [101, 101, 194] ,
2870 [102, 122, 74]
2871 ] ,
2872 [
2873 [48, 117, -151] ,
2874 [118, 118, 195] ,
2875 [119, 122, 74]
2876 ] ,
2877 [
2878 [48, 122, -35]
2879 ] ,
2880 [
2881 [48, 107, -31] ,
2882 [108, 108, 196] ,
2883 [109, 122, 74]
2884 ] ,
2885 [
2886 [48, 103, -43] ,
2887 [104, 104, 197] ,
2888 [105, 122, 74]
2889 ] ,
2890 [
2891 [48, 115, -80] ,
2892 [116, 116, 198] ,
2893 [117, 122, 74]
2894 ] ,
2895 [
2896 [0, 255, -47]
2897 ] ,
2898 [
2899 [48, 115, -80] ,
2900 [116, 116, 199] ,
2901 [117, 122, 74]
2902 ] ,
2903 [
2904 [48, 113, -30] ,
2905 [114, 114, 200] ,
2906 [115, 122, 74]
2907 ] ,
2908 [
2909 [48, 113, -30] ,
2910 [114, 114, 201] ,
2911 [115, 122, 74]
2912 ] ,
2913 [
2914 [48, 122, -35]
2915 ] ,
2916 [
2917 [48, 106, -150] ,
2918 [107, 107, 202] ,
2919 [108, 122, 74]
2920 ] ,
2921 [
2922 [48, 114, -79] ,
2923 [115, 115, 203] ,
2924 [116, 122, 74]
2925 ] ,
2926 [
2927 [48, 104, -93] ,
2928 [105, 105, 204] ,
2929 [106, 122, 74]
2930 ] ,
2931 [
2932 [48, 122, -35]
2933 ] ,
2934 [
2935 [48, 113, -30] ,
2936 [114, 114, 205] ,
2937 [115, 122, 74]
2938 ] ,
2939 [
2940 [48, 100, -37] ,
2941 [101, 101, 206] ,
2942 [102, 122, 74]
2943 ] ,
2944 [
2945 [48, 113, -30] ,
2946 [114, 114, 207] ,
2947 [115, 122, 74]
2948 ] ,
2949 [
2950 [48, 122, -35]
2951 ] ,
2952 [
2953 [48, 113, -30] ,
2954 [114, 114, 208] ,
2955 [115, 122, 74]
2956 ] ,
2957 [
2958 [48, 116, -108] ,
2959 [117, 117, 209] ,
2960 [118, 122, 74]
2961 ] ,
2962 [
2963 [48, 122, -35]
2964 ] ,
2965 [
2966 [48, 122, -35]
2967 ] ,
2968 [
2969 [48, 122, -35]
2970 ] ,
2971 [
2972 [48, 95, -29] ,
2973 [97, 97, 210] ,
2974 [98, 122, 74]
2975 ] ,
2976 [
2977 [48, 95, -29] ,
2978 [97, 97, 211] ,
2979 [98, 122, 74]
2980 ] ,
2981 [
2982 [48, 100, -37] ,
2983 [101, 101, 212] ,
2984 [102, 122, 74]
2985 ] ,
2986 [
2987 [48, 95, -29] ,
2988 [97, 97, 213] ,
2989 [98, 122, 74]
2990 ] ,
2991 [
2992 [48, 101, -36] ,
2993 [102, 102, 214] ,
2994 [103, 122, 74]
2995 ] ,
2996 [
2997 [48, 113, -30] ,
2998 [114, 114, 215] ,
2999 [115, 122, 74]
3000 ] ,
3001 [
3002 [48, 122, -35]
3003 ] ,
3004 [
3005 [48, 104, -93] ,
3006 [105, 105, 216] ,
3007 [106, 122, 74]
3008 ] ,
3009 [
3010 [48, 113, -30] ,
3011 [114, 114, 217] ,
3012 [115, 122, 74]
3013 ] ,
3014 [
3015 [48, 122, -35]
3016 ] ,
3017 [
3018 [48, 122, -35]
3019 ] ,
3020 [
3021 [48, 122, -35]
3022 ] ,
3023 [
3024 [48, 100, -37] ,
3025 [101, 101, 218] ,
3026 [102, 122, 74]
3027 ] ,
3028 [
3029 [48, 100, -37] ,
3030 [101, 101, 219] ,
3031 [102, 122, 74]
3032 ] ,
3033 [
3034 [48, 122, -35]
3035 ] ,
3036 [
3037 [48, 95, -29] ,
3038 [97, 97, 220] ,
3039 [98, 122, 74]
3040 ] ,
3041 [
3042 [48, 122, -35]
3043 ] ,
3044 [
3045 [48, 95, -29] ,
3046 [97, 97, 221] ,
3047 [98, 122, 74]
3048 ] ,
3049 [
3050 [48, 115, -80] ,
3051 [116, 116, 222] ,
3052 [117, 122, 74]
3053 ] ,
3054 [
3055 [48, 122, -35]
3056 ] ,
3057 [
3058 [48, 122, -35]
3059 ] ,
3060 [
3061 [48, 109, -39] ,
3062 [110, 110, 223] ,
3063 [111, 122, 74]
3064 ] ,
3065 [
3066 [48, 109, -39] ,
3067 [110, 110, 224] ,
3068 [111, 122, 74]
3069 ] ,
3070 [
3071 [48, 122, -35]
3072 ] ,
3073 [
3074 [48, 115, -80] ,
3075 [116, 116, 225] ,
3076 [117, 122, 74]
3077 ] ,
3078 [
3079 [48, 101, -36] ,
3080 [102, 102, 226] ,
3081 [103, 109, 74] ,
3082 [110, 110, 227] ,
3083 [111, 122, 74]
3084 ] ,
3085 [
3086 [48, 99, -78] ,
3087 [100, 100, 228] ,
3088 [101, 122, 74]
3089 ] ,
3090 [
3091 [48, 95, -29] ,
3092 [97, 102, 74] ,
3093 [103, 103, 229] ,
3094 [104, 122, 74]
3095 ] ,
3096 [
3097 [48, 115, -80] ,
3098 [116, 116, 230] ,
3099 [117, 122, 74]
3100 ] ,
3101 [
3102 [48, 98, -99] ,
3103 [99, 99, 231] ,
3104 [100, 122, 74]
3105 ] ,
3106 [
3107 [48, 97, -29] ,
3108 [98, 98, 232] ,
3109 [99, 122, 74]
3110 ] ,
3111 [
3112 [48, 122, -35]
3113 ] ,
3114 [
3115 [48, 109, -39] ,
3116 [110, 110, 233] ,
3117 [111, 122, 74]
3118 ] ,
3119 [
3120 [48, 95, -29] ,
3121 [97, 97, 234] ,
3122 [98, 122, 74]
3123 ] ,
3124 [
3125 [48, 122, -35]
3126 ] ,
3127 [
3128 [48, 113, -30] ,
3129 [114, 114, 235] ,
3130 [115, 122, 74]
3131 ] ,
3132 [
3133 [48, 122, -35]
3134 ] ,
3135 [
3136 [48, 97, -29] ,
3137 [98, 98, 236] ,
3138 [99, 122, 74]
3139 ] ,
3140 [
3141 [48, 98, -99] ,
3142 [99, 99, 237] ,
3143 [100, 122, 74]
3144 ] ,
3145 [
3146 [48, 122, -35]
3147 ] ,
3148 [
3149 [48, 116, -108] ,
3150 [117, 117, 238] ,
3151 [118, 122, 74]
3152 ] ,
3153 [
3154 [48, 122, -35]
3155 ] ,
3156 [
3157 [48, 122, -35]
3158 ] ,
3159 [
3160 [48, 95, -29] ,
3161 [97, 97, 239] ,
3162 [98, 122, 74]
3163 ] ,
3164 [
3165 [48, 122, -35]
3166 ] ,
3167 [
3168 [48, 100, -37] ,
3169 [101, 101, 240] ,
3170 [102, 122, 74]
3171 ] ,
3172 [
3173 [48, 100, -37] ,
3174 [101, 101, 241] ,
3175 [102, 122, 74]
3176 ] ,
3177 [
3178 [48, 100, -37] ,
3179 [101, 101, 242] ,
3180 [102, 122, 74]
3181 ] ,
3182 [
3183 [48, 115, -80] ,
3184 [116, 116, 243] ,
3185 [117, 122, 74]
3186 ] ,
3187 [
3188 [48, 107, -31] ,
3189 [108, 108, 244] ,
3190 [109, 122, 74]
3191 ] ,
3192 [
3193 [48, 122, -35]
3194 ] ,
3195 [
3196 [48, 107, -31] ,
3197 [108, 108, 245] ,
3198 [109, 122, 74]
3199 ] ,
3200 [
3201 [48, 114, -79] ,
3202 [115, 115, 246] ,
3203 [116, 122, 74]
3204 ] ,
3205 [
3206 [48, 107, -31] ,
3207 [108, 108, 247] ,
3208 [109, 122, 74]
3209 ] ,
3210 [
3211 [48, 115, -80] ,
3212 [116, 116, 248] ,
3213 [117, 122, 74]
3214 ] ,
3215 [
3216 [48, 100, -37] ,
3217 [101, 101, 249] ,
3218 [102, 122, 74]
3219 ] ,
3220 [
3221 [48, 98, -99] ,
3222 [99, 99, 250] ,
3223 [100, 122, 74]
3224 ] ,
3225 [
3226 [48, 122, -35]
3227 ] ,
3228 [
3229 [48, 122, -35]
3230 ] ,
3231 [
3232 [48, 122, -35]
3233 ] ,
3234 [
3235 [48, 100, -37] ,
3236 [101, 101, 251] ,
3237 [102, 122, 74]
3238 ] ,
3239 [
3240 [48, 100, -37] ,
3241 [101, 101, 252] ,
3242 [102, 122, 74]
3243 ] ,
3244 [
3245 [48, 122, -35]
3246 ] ,
3247 [
3248 [48, 95, -29] ,
3249 [97, 97, 253] ,
3250 [98, 122, 74]
3251 ] ,
3252 [
3253 [48, 100, -37] ,
3254 [101, 101, 254] ,
3255 [102, 122, 74]
3256 ] ,
3257 [
3258 [48, 122, -35]
3259 ] ,
3260 [
3261 [48, 122, -35]
3262 ] ,
3263 [
3264 [48, 100, -37] ,
3265 [101, 101, 255] ,
3266 [102, 122, 74]
3267 ] ,
3268 [
3269 [48, 99, -78] ,
3270 [100, 100, 256] ,
3271 [101, 122, 74]
3272 ] ,
3273 [
3274 [48, 122, -35]
3275 ] ,
3276 [
3277 [48, 107, -31] ,
3278 [108, 108, 257] ,
3279 [109, 122, 74]
3280 ] ,
3281 [
3282 [48, 122, -35]
3283 ] ,
3284 [
3285 [48, 122, -35]
3286 ] ,
3287 [
3288 [48, 122, -35]
3289 ] ,
3290 [
3291 [48, 122, -35]
3292 ]
3293 ]
3294 ]
3295 end
3296
3297 private meth nil_array: Array[Array[Int]]
3298 do
3299 return once new Array[Array[Int]]
3300 end
3301
3302 attr _accept_table: Array[Array[Int]]
3303 private meth build_accept_table do
3304 _accept_table = once [
3305 [
3306 -1 , 0 , 1 , 1 , 0 , -1 , -1 , -1 , 67 , -1 , 50 , 51 , 65 , 63 , 54 , 64 , 62 , 66 , 78 , 55 , 70 , 57 , 72 , 75 , 52 , 53 , -1 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , -1 , 1 , 69 , -1 , 81 , -1 , 82 , -1 , 2 , 2 , -1 , 80 , 58 , 59 , 61 , 79 , -1 , 56 , 71 , 68 , 73 , 75 , 75 , 75 , 75 , 77 , 76 , 76 , 76 , 76 , 76 , 76 , 48 , 76 , 76 , 76 , 76 , 17 , 76 , 76 , 76 , 76 , 76 , 76 , 26 , 76 , 31 , 16 , 76 , 76 , 76 , 76 , 76 , 33 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , -1 , 84 , -1 , 83 , -1 , 2 , 60 , 74 , 77 , 77 , 77 , 77 , 76 , 76 , 32 , 76 , 76 , 76 , 76 , 76 , 76 , 10 , 76 , 76 , 30 , 11 , 76 , 76 , 76 , 41 , 76 , 40 , 34 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 20 , 76 , 76 , 76 , -1 , 76 , 76 , 76 , 13 , 76 , 76 , 76 , 28 , 76 , 76 , 76 , 14 , 76 , 76 , 11 , 47 , 42 , 76 , 76 , 76 , 76 , 76 , 76 , 44 , 76 , 76 , 27 , 45 , 12 , 76 , 76 , 49 , 76 , 38 , 76 , 76 , 37 , 5 , 76 , 76 , 46 , 76 , 76 , 76 , 76 , 76 , 76 , 76 , 15 , 76 , 76 , 43 , 76 , 29 , 76 , 76 , 39 , 76 , 22 , 4 , 76 , 21 , 76 , 76 , 76 , 76 , 76 , 35 , 76 , 76 , 76 , 76 , 76 , 76 , 25 , 3 , 24 , 76 , 76 , 9 , 76 , 76 , 6 , 36 , 76 , 76 , 18 , 76 , 19 , 7 , 23 , 8
3307
3308 ]
3309 ]
3310 end
3311 end
3312