Add default values for some primitive type attributes.
[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(fname: String, line: Int, pos: Int)
177 do
178 _text = once "meth"
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 TOpar
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 "("
749 _filename = fname
750 _line = line
751 _pos = pos
752 end
753 end
754
755 redef class TCpar
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 TObra
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 TCbra
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 TComma
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 TColumn
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 TQuad
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 TAssign
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 TPluseq
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 TMinuseq
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 TDotdotdot
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 TDotdot
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 TDot
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 TPlus
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 TMinus
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 TStar
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 TSlash
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 TPercent
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 TEq
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 TNe
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 TLt
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 TLe
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 TGt
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 TGe
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 TStarship
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 TClassid
1116 redef meth parser_index: Int
1117 do
1118 return 73
1119 end
1120
1121 init init_tk(text: String, fname: String, line: Int, pos: Int)
1122 do
1123 _text = text
1124 _filename = fname
1125 _line = line
1126 _pos = pos
1127 end
1128 end
1129
1130 redef class TId
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 TAttrid
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 TNumber
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 TFloat
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 TChar
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 TString
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 TStartString
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 TMidString
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 TEndString
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
1266 redef class EOF
1267 redef meth parser_index: Int
1268 do
1269 return 83
1270 end
1271
1272 init(fname: String, line: Int, pos: Int)
1273 do
1274 _filename = fname
1275 _text = ""
1276 _line = line
1277 _pos = pos
1278 end
1279 end
1280
1281 redef class PError
1282 readable writable attr _message: String
1283
1284 init init_error(fname: String, line: Int, pos: Int, message: String)
1285 do
1286 init(fname, line, pos)
1287 _message = message
1288 end
1289 end
1290
1291
1292 # The lexer extract NIT tokens from an input stream.
1293 # It is better user with the Parser
1294 class Lexer
1295 # Last peeked token
1296 attr _token: Token
1297
1298 # Lexer current state
1299 attr _state: Int = 0
1300
1301 # Name of the stream (as given to tokens)
1302 readable attr _filename: String
1303
1304 # Input stream where character are read
1305 attr _stream: IStream
1306
1307 # Pushback buffer to store unread character
1308 attr _stream_buf: String
1309
1310 # Number of character stored in the pushback buffer
1311 attr _stream_pos: Int
1312
1313 # Current line number in the input stream
1314 attr _line: Int = 0
1315
1316 # Current column in the input stream
1317 attr _pos: Int = 0
1318
1319 # Was the last character a cariage-return?
1320 attr _cr: Bool = false
1321
1322 # If the end of stream?
1323 attr _eof: Bool = false
1324
1325 # Current working text read from the input stream
1326 attr _text: String
1327
1328 # Constante state values
1329 private meth state_initial: Int do return 0 end
1330
1331 # Create a new lexer for a stream (and a name)
1332 init(stream: IStream, fname: String)
1333 do
1334 _filename = fname
1335 _text = new String
1336 _stream = stream
1337 _stream_pos = -1
1338 _stream_buf = new String
1339 build_goto_table
1340 build_accept_table
1341 end
1342
1343 # Give the next token (but do not consume it)
1344 meth peek: Token
1345 do
1346 while _token == null do
1347 _token = get_token
1348 end
1349 return _token
1350 end
1351
1352 # Give and consume the next token
1353 meth next: Token
1354 do
1355 var result = _token
1356 while result == null do
1357 result = get_token
1358 end
1359 _token = null
1360 return result
1361 end
1362
1363 # Get a token, or null if it is discarded
1364 private meth get_token: Token
1365 do
1366 var dfa_state = 0
1367
1368 var start_pos = _pos
1369 var start_line = _line
1370
1371 var accept_state = -1
1372 var accept_token = -1
1373 var accept_length = -1
1374 var accept_pos = -1
1375 var accept_line = -1
1376
1377 var goto_table = _goto_table[_state]
1378 var accept = _accept_table[_state]
1379 _text.clear
1380
1381 while true do
1382 var c = get_char
1383
1384 if c != -1 then
1385 if c == 10 then
1386 if _cr then
1387 _cr = false
1388 else
1389 _line = _line + 1
1390 _pos = 0
1391 end
1392 else if c == 13 then
1393 _line = _line + 1
1394 _pos = 0
1395 _cr = true
1396 else
1397 _pos = _pos + 1
1398 _cr = false
1399 end
1400
1401 _text.add(c.ascii)
1402
1403 var first_loop = true # aka until
1404 while dfa_state < -1 or first_loop do
1405 var old_state = dfa_state
1406 if dfa_state < -1 then
1407 old_state = -2 - dfa_state
1408 end
1409
1410 dfa_state = -1
1411
1412 var tmp1 = goto_table[old_state]
1413 var low = 0
1414 var high = tmp1.length - 1
1415
1416 while low <= high do
1417 var middle = (low + high) / 2
1418 var tmp2 = tmp1[middle]
1419
1420 if c < tmp2[0] then
1421 high = middle - 1
1422 else if c > tmp2[1] then
1423 low = middle + 1
1424 else
1425 dfa_state = tmp2[2]
1426 low = high + 1 # aka break
1427 end
1428 end
1429 first_loop = false # aka until
1430 end
1431 else
1432 dfa_state = -1
1433 end
1434
1435 if dfa_state >= 0 then
1436 if accept[dfa_state] != -1 then
1437 accept_state = dfa_state
1438 accept_token = accept[dfa_state]
1439 accept_length = _text.length
1440 accept_pos = _pos
1441 accept_line = _line
1442 end
1443 else
1444 if accept_state != -1 then
1445 if accept_token == 0 then
1446 push_back(accept_length)
1447 _pos = accept_pos
1448 _line = accept_line
1449 return null
1450 end
1451 if accept_token == 1 then
1452 var token_text = _text.substring(0, accept_length)
1453 var token = new TEol.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1454 push_back(accept_length)
1455 _pos = accept_pos
1456 _line = accept_line
1457 return token
1458 end
1459 if accept_token == 2 then
1460 var token_text = _text.substring(0, accept_length)
1461 var token = new TComment.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1462 push_back(accept_length)
1463 _pos = accept_pos
1464 _line = accept_line
1465 return token
1466 end
1467 if accept_token == 3 then
1468 var token = new TKwpackage.init_tk(_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 == 4 then
1475 var token = new TKwimport.init_tk(_filename, start_line + 1, start_pos + 1)
1476 push_back(accept_length)
1477 _pos = accept_pos
1478 _line = accept_line
1479 return token
1480 end
1481 if accept_token == 5 then
1482 var token = new TKwclass.init_tk(_filename, start_line + 1, start_pos + 1)
1483 push_back(accept_length)
1484 _pos = accept_pos
1485 _line = accept_line
1486 return token
1487 end
1488 if accept_token == 6 then
1489 var token = new TKwabstract.init_tk(_filename, start_line + 1, start_pos + 1)
1490 push_back(accept_length)
1491 _pos = accept_pos
1492 _line = accept_line
1493 return token
1494 end
1495 if accept_token == 7 then
1496 var token = new TKwinterface.init_tk(_filename, start_line + 1, start_pos + 1)
1497 push_back(accept_length)
1498 _pos = accept_pos
1499 _line = accept_line
1500 return token
1501 end
1502 if accept_token == 8 then
1503 var token = new TKwuniversal.init_tk(_filename, start_line + 1, start_pos + 1)
1504 push_back(accept_length)
1505 _pos = accept_pos
1506 _line = accept_line
1507 return token
1508 end
1509 if accept_token == 9 then
1510 var token = new TKwspecial.init_tk(_filename, start_line + 1, start_pos + 1)
1511 push_back(accept_length)
1512 _pos = accept_pos
1513 _line = accept_line
1514 return token
1515 end
1516 if accept_token == 10 then
1517 var token = new TKwend.init_tk(_filename, start_line + 1, start_pos + 1)
1518 push_back(accept_length)
1519 _pos = accept_pos
1520 _line = accept_line
1521 return token
1522 end
1523 if accept_token == 11 then
1524 var token = new TKwmeth.init_tk(_filename, start_line + 1, start_pos + 1)
1525 push_back(accept_length)
1526 _pos = accept_pos
1527 _line = accept_line
1528 return token
1529 end
1530 if accept_token == 12 then
1531 var token = new TKwtype.init_tk(_filename, start_line + 1, start_pos + 1)
1532 push_back(accept_length)
1533 _pos = accept_pos
1534 _line = accept_line
1535 return token
1536 end
1537 if accept_token == 13 then
1538 var token = new TKwattr.init_tk(_filename, start_line + 1, start_pos + 1)
1539 push_back(accept_length)
1540 _pos = accept_pos
1541 _line = accept_line
1542 return token
1543 end
1544 if accept_token == 14 then
1545 var token = new TKwinit.init_tk(_filename, start_line + 1, start_pos + 1)
1546 push_back(accept_length)
1547 _pos = accept_pos
1548 _line = accept_line
1549 return token
1550 end
1551 if accept_token == 15 then
1552 var token = new TKwredef.init_tk(_filename, start_line + 1, start_pos + 1)
1553 push_back(accept_length)
1554 _pos = accept_pos
1555 _line = accept_line
1556 return token
1557 end
1558 if accept_token == 16 then
1559 var token = new TKwis.init_tk(_filename, start_line + 1, start_pos + 1)
1560 push_back(accept_length)
1561 _pos = accept_pos
1562 _line = accept_line
1563 return token
1564 end
1565 if accept_token == 17 then
1566 var token = new TKwdo.init_tk(_filename, start_line + 1, start_pos + 1)
1567 push_back(accept_length)
1568 _pos = accept_pos
1569 _line = accept_line
1570 return token
1571 end
1572 if accept_token == 18 then
1573 var token = new TKwreadable.init_tk(_filename, start_line + 1, start_pos + 1)
1574 push_back(accept_length)
1575 _pos = accept_pos
1576 _line = accept_line
1577 return token
1578 end
1579 if accept_token == 19 then
1580 var token = new TKwwritable.init_tk(_filename, start_line + 1, start_pos + 1)
1581 push_back(accept_length)
1582 _pos = accept_pos
1583 _line = accept_line
1584 return token
1585 end
1586 if accept_token == 20 then
1587 var token = new TKwvar.init_tk(_filename, start_line + 1, start_pos + 1)
1588 push_back(accept_length)
1589 _pos = accept_pos
1590 _line = accept_line
1591 return token
1592 end
1593 if accept_token == 21 then
1594 var token = new TKwintern.init_tk(_filename, start_line + 1, start_pos + 1)
1595 push_back(accept_length)
1596 _pos = accept_pos
1597 _line = accept_line
1598 return token
1599 end
1600 if accept_token == 22 then
1601 var token = new TKwextern.init_tk(_filename, start_line + 1, start_pos + 1)
1602 push_back(accept_length)
1603 _pos = accept_pos
1604 _line = accept_line
1605 return token
1606 end
1607 if accept_token == 23 then
1608 var token = new TKwprotected.init_tk(_filename, start_line + 1, start_pos + 1)
1609 push_back(accept_length)
1610 _pos = accept_pos
1611 _line = accept_line
1612 return token
1613 end
1614 if accept_token == 24 then
1615 var token = new TKwprivate.init_tk(_filename, start_line + 1, start_pos + 1)
1616 push_back(accept_length)
1617 _pos = accept_pos
1618 _line = accept_line
1619 return token
1620 end
1621 if accept_token == 25 then
1622 var token = new TKwintrude.init_tk(_filename, start_line + 1, start_pos + 1)
1623 push_back(accept_length)
1624 _pos = accept_pos
1625 _line = accept_line
1626 return token
1627 end
1628 if accept_token == 26 then
1629 var token = new TKwif.init_tk(_filename, start_line + 1, start_pos + 1)
1630 push_back(accept_length)
1631 _pos = accept_pos
1632 _line = accept_line
1633 return token
1634 end
1635 if accept_token == 27 then
1636 var token = new TKwthen.init_tk(_filename, start_line + 1, start_pos + 1)
1637 push_back(accept_length)
1638 _pos = accept_pos
1639 _line = accept_line
1640 return token
1641 end
1642 if accept_token == 28 then
1643 var token = new TKwelse.init_tk(_filename, start_line + 1, start_pos + 1)
1644 push_back(accept_length)
1645 _pos = accept_pos
1646 _line = accept_line
1647 return token
1648 end
1649 if accept_token == 29 then
1650 var token = new TKwwhile.init_tk(_filename, start_line + 1, start_pos + 1)
1651 push_back(accept_length)
1652 _pos = accept_pos
1653 _line = accept_line
1654 return token
1655 end
1656 if accept_token == 30 then
1657 var token = new TKwfor.init_tk(_filename, start_line + 1, start_pos + 1)
1658 push_back(accept_length)
1659 _pos = accept_pos
1660 _line = accept_line
1661 return token
1662 end
1663 if accept_token == 31 then
1664 var token = new TKwin.init_tk(_filename, start_line + 1, start_pos + 1)
1665 push_back(accept_length)
1666 _pos = accept_pos
1667 _line = accept_line
1668 return token
1669 end
1670 if accept_token == 32 then
1671 var token = new TKwand.init_tk(_filename, start_line + 1, start_pos + 1)
1672 push_back(accept_length)
1673 _pos = accept_pos
1674 _line = accept_line
1675 return token
1676 end
1677 if accept_token == 33 then
1678 var token = new TKwor.init_tk(_filename, start_line + 1, start_pos + 1)
1679 push_back(accept_length)
1680 _pos = accept_pos
1681 _line = accept_line
1682 return token
1683 end
1684 if accept_token == 34 then
1685 var token = new TKwnot.init_tk(_filename, start_line + 1, start_pos + 1)
1686 push_back(accept_length)
1687 _pos = accept_pos
1688 _line = accept_line
1689 return token
1690 end
1691 if accept_token == 35 then
1692 var token = new TKwreturn.init_tk(_filename, start_line + 1, start_pos + 1)
1693 push_back(accept_length)
1694 _pos = accept_pos
1695 _line = accept_line
1696 return token
1697 end
1698 if accept_token == 36 then
1699 var token = new TKwcontinue.init_tk(_filename, start_line + 1, start_pos + 1)
1700 push_back(accept_length)
1701 _pos = accept_pos
1702 _line = accept_line
1703 return token
1704 end
1705 if accept_token == 37 then
1706 var token = new TKwbreak.init_tk(_filename, start_line + 1, start_pos + 1)
1707 push_back(accept_length)
1708 _pos = accept_pos
1709 _line = accept_line
1710 return token
1711 end
1712 if accept_token == 38 then
1713 var token = new TKwabort.init_tk(_filename, start_line + 1, start_pos + 1)
1714 push_back(accept_length)
1715 _pos = accept_pos
1716 _line = accept_line
1717 return token
1718 end
1719 if accept_token == 39 then
1720 var token = new TKwassert.init_tk(_filename, start_line + 1, start_pos + 1)
1721 push_back(accept_length)
1722 _pos = accept_pos
1723 _line = accept_line
1724 return token
1725 end
1726 if accept_token == 40 then
1727 var token = new TKwnew.init_tk(_filename, start_line + 1, start_pos + 1)
1728 push_back(accept_length)
1729 _pos = accept_pos
1730 _line = accept_line
1731 return token
1732 end
1733 if accept_token == 41 then
1734 var token = new TKwisa.init_tk(_filename, start_line + 1, start_pos + 1)
1735 push_back(accept_length)
1736 _pos = accept_pos
1737 _line = accept_line
1738 return token
1739 end
1740 if accept_token == 42 then
1741 var token = new TKwonce.init_tk(_filename, start_line + 1, start_pos + 1)
1742 push_back(accept_length)
1743 _pos = accept_pos
1744 _line = accept_line
1745 return token
1746 end
1747 if accept_token == 43 then
1748 var token = new TKwsuper.init_tk(_filename, start_line + 1, start_pos + 1)
1749 push_back(accept_length)
1750 _pos = accept_pos
1751 _line = accept_line
1752 return token
1753 end
1754 if accept_token == 44 then
1755 var token = new TKwself.init_tk(_filename, start_line + 1, start_pos + 1)
1756 push_back(accept_length)
1757 _pos = accept_pos
1758 _line = accept_line
1759 return token
1760 end
1761 if accept_token == 45 then
1762 var token = new TKwtrue.init_tk(_filename, start_line + 1, start_pos + 1)
1763 push_back(accept_length)
1764 _pos = accept_pos
1765 _line = accept_line
1766 return token
1767 end
1768 if accept_token == 46 then
1769 var token = new TKwfalse.init_tk(_filename, start_line + 1, start_pos + 1)
1770 push_back(accept_length)
1771 _pos = accept_pos
1772 _line = accept_line
1773 return token
1774 end
1775 if accept_token == 47 then
1776 var token = new TKwnull.init_tk(_filename, start_line + 1, start_pos + 1)
1777 push_back(accept_length)
1778 _pos = accept_pos
1779 _line = accept_line
1780 return token
1781 end
1782 if accept_token == 48 then
1783 var token = new TKwas.init_tk(_filename, start_line + 1, start_pos + 1)
1784 push_back(accept_length)
1785 _pos = accept_pos
1786 _line = accept_line
1787 return token
1788 end
1789 if accept_token == 49 then
1790 var token = new TOpar.init_tk(_filename, start_line + 1, start_pos + 1)
1791 push_back(accept_length)
1792 _pos = accept_pos
1793 _line = accept_line
1794 return token
1795 end
1796 if accept_token == 50 then
1797 var token = new TCpar.init_tk(_filename, start_line + 1, start_pos + 1)
1798 push_back(accept_length)
1799 _pos = accept_pos
1800 _line = accept_line
1801 return token
1802 end
1803 if accept_token == 51 then
1804 var token = new TObra.init_tk(_filename, start_line + 1, start_pos + 1)
1805 push_back(accept_length)
1806 _pos = accept_pos
1807 _line = accept_line
1808 return token
1809 end
1810 if accept_token == 52 then
1811 var token = new TCbra.init_tk(_filename, start_line + 1, start_pos + 1)
1812 push_back(accept_length)
1813 _pos = accept_pos
1814 _line = accept_line
1815 return token
1816 end
1817 if accept_token == 53 then
1818 var token = new TComma.init_tk(_filename, start_line + 1, start_pos + 1)
1819 push_back(accept_length)
1820 _pos = accept_pos
1821 _line = accept_line
1822 return token
1823 end
1824 if accept_token == 54 then
1825 var token = new TColumn.init_tk(_filename, start_line + 1, start_pos + 1)
1826 push_back(accept_length)
1827 _pos = accept_pos
1828 _line = accept_line
1829 return token
1830 end
1831 if accept_token == 55 then
1832 var token = new TQuad.init_tk(_filename, start_line + 1, start_pos + 1)
1833 push_back(accept_length)
1834 _pos = accept_pos
1835 _line = accept_line
1836 return token
1837 end
1838 if accept_token == 56 then
1839 var token = new TAssign.init_tk(_filename, start_line + 1, start_pos + 1)
1840 push_back(accept_length)
1841 _pos = accept_pos
1842 _line = accept_line
1843 return token
1844 end
1845 if accept_token == 57 then
1846 var token = new TPluseq.init_tk(_filename, start_line + 1, start_pos + 1)
1847 push_back(accept_length)
1848 _pos = accept_pos
1849 _line = accept_line
1850 return token
1851 end
1852 if accept_token == 58 then
1853 var token = new TMinuseq.init_tk(_filename, start_line + 1, start_pos + 1)
1854 push_back(accept_length)
1855 _pos = accept_pos
1856 _line = accept_line
1857 return token
1858 end
1859 if accept_token == 59 then
1860 var token = new TDotdotdot.init_tk(_filename, start_line + 1, start_pos + 1)
1861 push_back(accept_length)
1862 _pos = accept_pos
1863 _line = accept_line
1864 return token
1865 end
1866 if accept_token == 60 then
1867 var token = new TDotdot.init_tk(_filename, start_line + 1, start_pos + 1)
1868 push_back(accept_length)
1869 _pos = accept_pos
1870 _line = accept_line
1871 return token
1872 end
1873 if accept_token == 61 then
1874 var token = new TDot.init_tk(_filename, start_line + 1, start_pos + 1)
1875 push_back(accept_length)
1876 _pos = accept_pos
1877 _line = accept_line
1878 return token
1879 end
1880 if accept_token == 62 then
1881 var token = new TPlus.init_tk(_filename, start_line + 1, start_pos + 1)
1882 push_back(accept_length)
1883 _pos = accept_pos
1884 _line = accept_line
1885 return token
1886 end
1887 if accept_token == 63 then
1888 var token = new TMinus.init_tk(_filename, start_line + 1, start_pos + 1)
1889 push_back(accept_length)
1890 _pos = accept_pos
1891 _line = accept_line
1892 return token
1893 end
1894 if accept_token == 64 then
1895 var token = new TStar.init_tk(_filename, start_line + 1, start_pos + 1)
1896 push_back(accept_length)
1897 _pos = accept_pos
1898 _line = accept_line
1899 return token
1900 end
1901 if accept_token == 65 then
1902 var token = new TSlash.init_tk(_filename, start_line + 1, start_pos + 1)
1903 push_back(accept_length)
1904 _pos = accept_pos
1905 _line = accept_line
1906 return token
1907 end
1908 if accept_token == 66 then
1909 var token = new TPercent.init_tk(_filename, start_line + 1, start_pos + 1)
1910 push_back(accept_length)
1911 _pos = accept_pos
1912 _line = accept_line
1913 return token
1914 end
1915 if accept_token == 67 then
1916 var token = new TEq.init_tk(_filename, start_line + 1, start_pos + 1)
1917 push_back(accept_length)
1918 _pos = accept_pos
1919 _line = accept_line
1920 return token
1921 end
1922 if accept_token == 68 then
1923 var token = new TNe.init_tk(_filename, start_line + 1, start_pos + 1)
1924 push_back(accept_length)
1925 _pos = accept_pos
1926 _line = accept_line
1927 return token
1928 end
1929 if accept_token == 69 then
1930 var token = new TLt.init_tk(_filename, start_line + 1, start_pos + 1)
1931 push_back(accept_length)
1932 _pos = accept_pos
1933 _line = accept_line
1934 return token
1935 end
1936 if accept_token == 70 then
1937 var token = new TLe.init_tk(_filename, start_line + 1, start_pos + 1)
1938 push_back(accept_length)
1939 _pos = accept_pos
1940 _line = accept_line
1941 return token
1942 end
1943 if accept_token == 71 then
1944 var token = new TGt.init_tk(_filename, start_line + 1, start_pos + 1)
1945 push_back(accept_length)
1946 _pos = accept_pos
1947 _line = accept_line
1948 return token
1949 end
1950 if accept_token == 72 then
1951 var token = new TGe.init_tk(_filename, start_line + 1, start_pos + 1)
1952 push_back(accept_length)
1953 _pos = accept_pos
1954 _line = accept_line
1955 return token
1956 end
1957 if accept_token == 73 then
1958 var token = new TStarship.init_tk(_filename, start_line + 1, start_pos + 1)
1959 push_back(accept_length)
1960 _pos = accept_pos
1961 _line = accept_line
1962 return token
1963 end
1964 if accept_token == 74 then
1965 var token_text = _text.substring(0, accept_length)
1966 var token = new TClassid.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1967 push_back(accept_length)
1968 _pos = accept_pos
1969 _line = accept_line
1970 return token
1971 end
1972 if accept_token == 75 then
1973 var token_text = _text.substring(0, accept_length)
1974 var token = new TId.init_tk(token_text, _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 == 76 then
1981 var token_text = _text.substring(0, accept_length)
1982 var token = new TAttrid.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1983 push_back(accept_length)
1984 _pos = accept_pos
1985 _line = accept_line
1986 return token
1987 end
1988 if accept_token == 77 then
1989 var token_text = _text.substring(0, accept_length)
1990 var token = new TNumber.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1991 push_back(accept_length)
1992 _pos = accept_pos
1993 _line = accept_line
1994 return token
1995 end
1996 if accept_token == 78 then
1997 var token_text = _text.substring(0, accept_length)
1998 var token = new TFloat.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
1999 push_back(accept_length)
2000 _pos = accept_pos
2001 _line = accept_line
2002 return token
2003 end
2004 if accept_token == 79 then
2005 var token_text = _text.substring(0, accept_length)
2006 var token = new TChar.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2007 push_back(accept_length)
2008 _pos = accept_pos
2009 _line = accept_line
2010 return token
2011 end
2012 if accept_token == 80 then
2013 var token_text = _text.substring(0, accept_length)
2014 var token = new TString.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2015 push_back(accept_length)
2016 _pos = accept_pos
2017 _line = accept_line
2018 return token
2019 end
2020 if accept_token == 81 then
2021 var token_text = _text.substring(0, accept_length)
2022 var token = new TStartString.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2023 push_back(accept_length)
2024 _pos = accept_pos
2025 _line = accept_line
2026 return token
2027 end
2028 if accept_token == 82 then
2029 var token_text = _text.substring(0, accept_length)
2030 var token = new TMidString.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2031 push_back(accept_length)
2032 _pos = accept_pos
2033 _line = accept_line
2034 return token
2035 end
2036 if accept_token == 83 then
2037 var token_text = _text.substring(0, accept_length)
2038 var token = new TEndString.init_tk(token_text, _filename, start_line + 1, start_pos + 1)
2039 push_back(accept_length)
2040 _pos = accept_pos
2041 _line = accept_line
2042 return token
2043 end
2044 else
2045 if _text.length > 0 then
2046 var token = new PError.init_error(_filename, start_line + 1, start_pos + 1, "Unknown token: {_text}")
2047 return token
2048 else
2049 var token = new EOF(_filename, start_line + 1, start_pos + 1)
2050 return token
2051 end
2052 end
2053 end
2054 end
2055 return null
2056 end
2057
2058 # Read the next character.
2059 # The character is read from the stream of from the pushback buffer.
2060 private meth get_char: Int
2061 do
2062 if _eof then
2063 return -1
2064 end
2065
2066 var result: Int
2067
2068 var sp = _stream_pos
2069 if sp >= 0 then
2070 var res = _stream_buf[_stream_pos]
2071 _stream_pos = sp - 1
2072 result = res.ascii
2073 else
2074 result = _stream.read_char
2075 end
2076
2077 if result == -1 then
2078 _eof = true
2079 end
2080
2081 return result
2082 end
2083
2084 # Unread some characters.
2085 # Unread characters are stored in the pushback buffer.
2086 private meth push_back(accept_length: Int)
2087 do
2088 var length = _text.length
2089 var i = length - 1
2090 while i >= accept_length do
2091 _eof = false
2092 _stream_pos = _stream_pos + 1
2093 _stream_buf[_stream_pos] = _text[i]
2094 i = i - 1
2095 end
2096 end
2097
2098 attr _goto_table: Array[Array[Array[Array[Int]]]]
2099 private meth build_goto_table
2100 do
2101 _goto_table = once [
2102 [
2103 [
2104 [9, 9, 1] ,
2105 [10, 10, 2] ,
2106 [13, 13, 3] ,
2107 [32, 32, 4] ,
2108 [33, 33, 5] ,
2109 [34, 34, 6] ,
2110 [35, 35, 7] ,
2111 [37, 37, 8] ,
2112 [39, 39, 9] ,
2113 [40, 40, 10] ,
2114 [41, 41, 11] ,
2115 [42, 42, 12] ,
2116 [43, 43, 13] ,
2117 [44, 44, 14] ,
2118 [45, 45, 15] ,
2119 [46, 46, 16] ,
2120 [47, 47, 17] ,
2121 [48, 57, 18] ,
2122 [58, 58, 19] ,
2123 [60, 60, 20] ,
2124 [61, 61, 21] ,
2125 [62, 62, 22] ,
2126 [65, 90, 23] ,
2127 [91, 91, 24] ,
2128 [93, 93, 25] ,
2129 [95, 95, 26] ,
2130 [97, 97, 27] ,
2131 [98, 98, 28] ,
2132 [99, 99, 29] ,
2133 [100, 100, 30] ,
2134 [101, 101, 31] ,
2135 [102, 102, 32] ,
2136 [103, 104, 33] ,
2137 [105, 105, 34] ,
2138 [106, 108, 33] ,
2139 [109, 109, 35] ,
2140 [110, 110, 36] ,
2141 [111, 111, 37] ,
2142 [112, 112, 38] ,
2143 [113, 113, 33] ,
2144 [114, 114, 39] ,
2145 [115, 115, 40] ,
2146 [116, 116, 41] ,
2147 [117, 117, 42] ,
2148 [118, 118, 43] ,
2149 [119, 119, 44] ,
2150 [120, 122, 33] ,
2151 [125, 125, 45]
2152 ] ,
2153 [
2154 [9, 9, 1] ,
2155 [32, 32, 4]
2156 ] ,
2157 nil_array ,
2158 [
2159 [10, 10, 46]
2160 ] ,
2161 [
2162 [9, 32, -3]
2163 ] ,
2164 [
2165 [61, 61, 47]
2166 ] ,
2167 [
2168 [0, 9, 48] ,
2169 [11, 12, 48] ,
2170 [14, 33, 48] ,
2171 [34, 34, 49] ,
2172 [35, 91, 48] ,
2173 [92, 92, 50] ,
2174 [93, 122, 48] ,
2175 [123, 123, 51] ,
2176 [124, 255, 48]
2177 ] ,
2178 [
2179 [0, 9, 52] ,
2180 [10, 10, 53] ,
2181 [11, 12, 52] ,
2182 [13, 13, 54] ,
2183 [14, 255, 52]
2184 ] ,
2185 nil_array ,
2186 [
2187 [0, 9, 55] ,
2188 [11, 12, 55] ,
2189 [14, 38, 55] ,
2190 [39, 39, 56] ,
2191 [40, 255, 55]
2192 ] ,
2193 nil_array ,
2194 nil_array ,
2195 nil_array ,
2196 [
2197 [61, 61, 57]
2198 ] ,
2199 nil_array ,
2200 [
2201 [61, 61, 58]
2202 ] ,
2203 [
2204 [46, 46, 59] ,
2205 [48, 57, 60]
2206 ] ,
2207 nil_array ,
2208 [
2209 [46, 46, 61] ,
2210 [48, 57, 18]
2211 ] ,
2212 [
2213 [58, 58, 62]
2214 ] ,
2215 [
2216 [61, 61, 63]
2217 ] ,
2218 [
2219 [61, 61, 64]
2220 ] ,
2221 [
2222 [61, 61, 65]
2223 ] ,
2224 [
2225 [48, 57, 66] ,
2226 [65, 90, 67] ,
2227 [95, 95, 68] ,
2228 [97, 122, 69]
2229 ] ,
2230 nil_array ,
2231 nil_array ,
2232 [
2233 [97, 122, 70]
2234 ] ,
2235 [
2236 [48, 57, 71] ,
2237 [65, 90, 72] ,
2238 [95, 95, 73] ,
2239 [97, 97, 74] ,
2240 [98, 98, 75] ,
2241 [99, 109, 74] ,
2242 [110, 110, 76] ,
2243 [111, 114, 74] ,
2244 [115, 115, 77] ,
2245 [116, 116, 78] ,
2246 [117, 122, 74]
2247 ] ,
2248 [
2249 [48, 95, -29] ,
2250 [97, 113, 74] ,
2251 [114, 114, 79] ,
2252 [115, 122, 74]
2253 ] ,
2254 [
2255 [48, 95, -29] ,
2256 [97, 107, 74] ,
2257 [108, 108, 80] ,
2258 [109, 110, 74] ,
2259 [111, 111, 81] ,
2260 [112, 122, 74]
2261 ] ,
2262 [
2263 [48, 95, -29] ,
2264 [97, 110, 74] ,
2265 [111, 111, 82] ,
2266 [112, 122, 74]
2267 ] ,
2268 [
2269 [48, 107, -31] ,
2270 [108, 108, 83] ,
2271 [109, 109, 74] ,
2272 [110, 110, 84] ,
2273 [111, 119, 74] ,
2274 [120, 120, 85] ,
2275 [121, 122, 74]
2276 ] ,
2277 [
2278 [48, 95, -29] ,
2279 [97, 97, 86] ,
2280 [98, 110, 74] ,
2281 [111, 111, 87] ,
2282 [112, 122, 74]
2283 ] ,
2284 [
2285 [48, 95, -29] ,
2286 [97, 122, 74]
2287 ] ,
2288 [
2289 [48, 95, -29] ,
2290 [97, 101, 74] ,
2291 [102, 102, 88] ,
2292 [103, 108, 74] ,
2293 [109, 109, 89] ,
2294 [110, 110, 90] ,
2295 [111, 114, 74] ,
2296 [115, 115, 91] ,
2297 [116, 122, 74]
2298 ] ,
2299 [
2300 [48, 95, -29] ,
2301 [97, 100, 74] ,
2302 [101, 101, 92] ,
2303 [102, 122, 74]
2304 ] ,
2305 [
2306 [48, 100, -37] ,
2307 [101, 101, 93] ,
2308 [102, 110, 74] ,
2309 [111, 111, 94] ,
2310 [112, 116, 74] ,
2311 [117, 117, 95] ,
2312 [118, 122, 74]
2313 ] ,
2314 [
2315 [48, 95, -29] ,
2316 [97, 109, 74] ,
2317 [110, 110, 96] ,
2318 [111, 113, 74] ,
2319 [114, 114, 97] ,
2320 [115, 122, 74]
2321 ] ,
2322 [
2323 [48, 95, -29] ,
2324 [97, 97, 98] ,
2325 [98, 113, 74] ,
2326 [114, 114, 99] ,
2327 [115, 122, 74]
2328 ] ,
2329 [
2330 [48, 100, -37] ,
2331 [101, 101, 100] ,
2332 [102, 122, 74]
2333 ] ,
2334 [
2335 [48, 100, -37] ,
2336 [101, 101, 101] ,
2337 [102, 111, 74] ,
2338 [112, 112, 102] ,
2339 [113, 116, 74] ,
2340 [117, 117, 103] ,
2341 [118, 122, 74]
2342 ] ,
2343 [
2344 [48, 95, -29] ,
2345 [97, 103, 74] ,
2346 [104, 104, 104] ,
2347 [105, 113, 74] ,
2348 [114, 114, 105] ,
2349 [115, 120, 74] ,
2350 [121, 121, 106] ,
2351 [122, 122, 74]
2352 ] ,
2353 [
2354 [48, 109, -39] ,
2355 [110, 110, 107] ,
2356 [111, 122, 74]
2357 ] ,
2358 [
2359 [48, 95, -29] ,
2360 [97, 97, 108] ,
2361 [98, 122, 74]
2362 ] ,
2363 [
2364 [48, 103, -43] ,
2365 [104, 104, 109] ,
2366 [105, 113, 74] ,
2367 [114, 114, 110] ,
2368 [115, 122, 74]
2369 ] ,
2370 [
2371 [0, 9, 111] ,
2372 [11, 12, 111] ,
2373 [14, 33, 111] ,
2374 [34, 34, 112] ,
2375 [35, 91, 111] ,
2376 [92, 92, 113] ,
2377 [93, 122, 111] ,
2378 [123, 123, 114] ,
2379 [124, 255, 111]
2380 ] ,
2381 nil_array ,
2382 nil_array ,
2383 [
2384 [0, 255, -8]
2385 ] ,
2386 nil_array ,
2387 [
2388 [0, 9, 115] ,
2389 [11, 12, 115] ,
2390 [14, 255, 115]
2391 ] ,
2392 nil_array ,
2393 [
2394 [0, 255, -9]
2395 ] ,
2396 nil_array ,
2397 [
2398 [10, 10, 116]
2399 ] ,
2400 [
2401 [0, 255, -11]
2402 ] ,
2403 nil_array ,
2404 nil_array ,
2405 nil_array ,
2406 [
2407 [46, 46, 117]
2408 ] ,
2409 [
2410 [48, 57, 60]
2411 ] ,
2412 [
2413 [48, 57, 60]
2414 ] ,
2415 nil_array ,
2416 [
2417 [62, 62, 118]
2418 ] ,
2419 nil_array ,
2420 nil_array ,
2421 [
2422 [48, 122, -25]
2423 ] ,
2424 [
2425 [48, 122, -25]
2426 ] ,
2427 [
2428 [48, 122, -25]
2429 ] ,
2430 [
2431 [48, 122, -25]
2432 ] ,
2433 [
2434 [48, 57, 119] ,
2435 [65, 90, 120] ,
2436 [95, 95, 121] ,
2437 [97, 122, 122]
2438 ] ,
2439 [
2440 [48, 122, -35]
2441 ] ,
2442 [
2443 [48, 122, -35]
2444 ] ,
2445 [
2446 [48, 122, -35]
2447 ] ,
2448 [
2449 [48, 122, -35]
2450 ] ,
2451 [
2452 [48, 110, -32] ,
2453 [111, 111, 123] ,
2454 [112, 114, 74] ,
2455 [115, 115, 124] ,
2456 [116, 122, 74]
2457 ] ,
2458 [
2459 [48, 95, -29] ,
2460 [97, 99, 74] ,
2461 [100, 100, 125] ,
2462 [101, 122, 74]
2463 ] ,
2464 [
2465 [48, 95, -29] ,
2466 [97, 114, 74] ,
2467 [115, 115, 126] ,
2468 [116, 122, 74]
2469 ] ,
2470 [
2471 [48, 95, -29] ,
2472 [97, 115, 74] ,
2473 [116, 116, 127] ,
2474 [117, 122, 74]
2475 ] ,
2476 [
2477 [48, 100, -37] ,
2478 [101, 101, 128] ,
2479 [102, 122, 74]
2480 ] ,
2481 [
2482 [48, 95, -29] ,
2483 [97, 97, 129] ,
2484 [98, 122, 74]
2485 ] ,
2486 [
2487 [48, 109, -39] ,
2488 [110, 110, 130] ,
2489 [111, 122, 74]
2490 ] ,
2491 [
2492 [48, 122, -35]
2493 ] ,
2494 [
2495 [48, 114, -79] ,
2496 [115, 115, 131] ,
2497 [116, 122, 74]
2498 ] ,
2499 [
2500 [48, 99, -78] ,
2501 [100, 100, 132] ,
2502 [101, 122, 74]
2503 ] ,
2504 [
2505 [48, 115, -80] ,
2506 [116, 116, 133] ,
2507 [117, 122, 74]
2508 ] ,
2509 [
2510 [48, 107, -31] ,
2511 [108, 108, 134] ,
2512 [109, 122, 74]
2513 ] ,
2514 [
2515 [48, 113, -30] ,
2516 [114, 114, 135] ,
2517 [115, 122, 74]
2518 ] ,
2519 [
2520 [48, 122, -35]
2521 ] ,
2522 [
2523 [48, 95, -29] ,
2524 [97, 111, 74] ,
2525 [112, 112, 136] ,
2526 [113, 122, 74]
2527 ] ,
2528 [
2529 [48, 95, -29] ,
2530 [97, 104, 74] ,
2531 [105, 105, 137] ,
2532 [106, 115, 74] ,
2533 [116, 116, 138] ,
2534 [117, 122, 74]
2535 ] ,
2536 [
2537 [48, 95, -29] ,
2538 [97, 97, 139] ,
2539 [98, 122, 74]
2540 ] ,
2541 [
2542 [48, 115, -80] ,
2543 [116, 116, 140] ,
2544 [117, 122, 74]
2545 ] ,
2546 [
2547 [48, 95, -29] ,
2548 [97, 118, 74] ,
2549 [119, 119, 141] ,
2550 [120, 122, 74]
2551 ] ,
2552 [
2553 [48, 115, -80] ,
2554 [116, 116, 142] ,
2555 [117, 122, 74]
2556 ] ,
2557 [
2558 [48, 107, -31] ,
2559 [108, 108, 143] ,
2560 [109, 122, 74]
2561 ] ,
2562 [
2563 [48, 95, -29] ,
2564 [97, 98, 74] ,
2565 [99, 99, 144] ,
2566 [100, 122, 74]
2567 ] ,
2568 [
2569 [48, 122, -35]
2570 ] ,
2571 [
2572 [48, 98, -98] ,
2573 [99, 99, 145] ,
2574 [100, 122, 74]
2575 ] ,
2576 [
2577 [48, 104, -92] ,
2578 [105, 105, 146] ,
2579 [106, 110, 74] ,
2580 [111, 111, 147] ,
2581 [112, 122, 74]
2582 ] ,
2583 [
2584 [48, 95, -29] ,
2585 [97, 97, 148] ,
2586 [98, 99, 74] ,
2587 [100, 100, 149] ,
2588 [101, 115, 74] ,
2589 [116, 116, 150] ,
2590 [117, 122, 74]
2591 ] ,
2592 [
2593 [48, 107, -31] ,
2594 [108, 108, 151] ,
2595 [109, 122, 74]
2596 ] ,
2597 [
2598 [48, 100, -37] ,
2599 [101, 101, 152] ,
2600 [102, 122, 74]
2601 ] ,
2602 [
2603 [48, 111, -91] ,
2604 [112, 112, 153] ,
2605 [113, 122, 74]
2606 ] ,
2607 [
2608 [48, 100, -37] ,
2609 [101, 101, 154] ,
2610 [102, 122, 74]
2611 ] ,
2612 [
2613 [48, 95, -29] ,
2614 [97, 116, 74] ,
2615 [117, 117, 155] ,
2616 [118, 122, 74]
2617 ] ,
2618 [
2619 [48, 111, -91] ,
2620 [112, 112, 156] ,
2621 [113, 122, 74]
2622 ] ,
2623 [
2624 [48, 104, -92] ,
2625 [105, 105, 157] ,
2626 [106, 122, 74]
2627 ] ,
2628 [
2629 [48, 113, -30] ,
2630 [114, 114, 158] ,
2631 [115, 122, 74]
2632 ] ,
2633 [
2634 [48, 104, -92] ,
2635 [105, 105, 159] ,
2636 [106, 122, 74]
2637 ] ,
2638 [
2639 [48, 104, -92] ,
2640 [105, 105, 160] ,
2641 [106, 122, 74]
2642 ] ,
2643 [
2644 [0, 255, -47]
2645 ] ,
2646 nil_array ,
2647 [
2648 [0, 9, 161] ,
2649 [11, 12, 161] ,
2650 [14, 255, 161]
2651 ] ,
2652 nil_array ,
2653 [
2654 [0, 255, -8]
2655 ] ,
2656 nil_array ,
2657 nil_array ,
2658 nil_array ,
2659 [
2660 [48, 122, -72]
2661 ] ,
2662 [
2663 [48, 122, -72]
2664 ] ,
2665 [
2666 [48, 122, -72]
2667 ] ,
2668 [
2669 [48, 122, -72]
2670 ] ,
2671 [
2672 [48, 113, -30] ,
2673 [114, 114, 162] ,
2674 [115, 122, 74]
2675 ] ,
2676 [
2677 [48, 115, -80] ,
2678 [116, 116, 163] ,
2679 [117, 122, 74]
2680 ] ,
2681 [
2682 [48, 122, -35]
2683 ] ,
2684 [
2685 [48, 100, -37] ,
2686 [101, 101, 164] ,
2687 [102, 122, 74]
2688 ] ,
2689 [
2690 [48, 113, -30] ,
2691 [114, 114, 165] ,
2692 [115, 122, 74]
2693 ] ,
2694 [
2695 [48, 95, -29] ,
2696 [97, 97, 166] ,
2697 [98, 122, 74]
2698 ] ,
2699 [
2700 [48, 114, -79] ,
2701 [115, 115, 167] ,
2702 [116, 122, 74]
2703 ] ,
2704 [
2705 [48, 115, -80] ,
2706 [116, 116, 168] ,
2707 [117, 122, 74]
2708 ] ,
2709 [
2710 [48, 100, -37] ,
2711 [101, 101, 169] ,
2712 [102, 122, 74]
2713 ] ,
2714 [
2715 [48, 122, -35]
2716 ] ,
2717 [
2718 [48, 100, -37] ,
2719 [101, 101, 170] ,
2720 [102, 122, 74]
2721 ] ,
2722 [
2723 [48, 114, -79] ,
2724 [115, 115, 171] ,
2725 [116, 122, 74]
2726 ] ,
2727 [
2728 [48, 122, -35]
2729 ] ,
2730 [
2731 [48, 110, -32] ,
2732 [111, 111, 172] ,
2733 [112, 122, 74]
2734 ] ,
2735 [
2736 [48, 115, -80] ,
2737 [116, 116, 173] ,
2738 [117, 122, 74]
2739 ] ,
2740 [
2741 [48, 100, -37] ,
2742 [101, 101, 174] ,
2743 [102, 113, 74] ,
2744 [114, 114, 175] ,
2745 [115, 122, 74]
2746 ] ,
2747 [
2748 [48, 122, -35]
2749 ] ,
2750 [
2751 [48, 103, -43] ,
2752 [104, 104, 176] ,
2753 [105, 122, 74]
2754 ] ,
2755 [
2756 [48, 122, -35]
2757 ] ,
2758 [
2759 [48, 122, -35]
2760 ] ,
2761 [
2762 [48, 107, -31] ,
2763 [108, 108, 177] ,
2764 [109, 122, 74]
2765 ] ,
2766 [
2767 [48, 100, -37] ,
2768 [101, 101, 178] ,
2769 [102, 122, 74]
2770 ] ,
2771 [
2772 [48, 95, -29] ,
2773 [97, 106, 74] ,
2774 [107, 107, 179] ,
2775 [108, 122, 74]
2776 ] ,
2777 [
2778 [48, 95, -29] ,
2779 [97, 117, 74] ,
2780 [118, 118, 180] ,
2781 [119, 122, 74]
2782 ] ,
2783 [
2784 [48, 115, -80] ,
2785 [116, 116, 181] ,
2786 [117, 122, 74]
2787 ] ,
2788 [
2789 [48, 99, -78] ,
2790 [100, 100, 182] ,
2791 [101, 122, 74]
2792 ] ,
2793 [
2794 [48, 100, -37] ,
2795 [101, 101, 183] ,
2796 [102, 122, 74]
2797 ] ,
2798 [
2799 [48, 116, -107] ,
2800 [117, 117, 184] ,
2801 [118, 122, 74]
2802 ] ,
2803 [
2804 [48, 101, -36] ,
2805 [102, 102, 185] ,
2806 [103, 122, 74]
2807 ] ,
2808 [
2809 [48, 98, -98] ,
2810 [99, 99, 186] ,
2811 [100, 122, 74]
2812 ] ,
2813 [
2814 [48, 100, -37] ,
2815 [101, 101, 187] ,
2816 [102, 122, 74]
2817 ] ,
2818 [
2819 [48, 109, -39] ,
2820 [110, 110, 188] ,
2821 [111, 122, 74]
2822 ] ,
2823 [
2824 [48, 100, -37] ,
2825 [101, 101, 189] ,
2826 [102, 122, 74]
2827 ] ,
2828 [
2829 [48, 100, -37] ,
2830 [101, 101, 190] ,
2831 [102, 122, 74]
2832 ] ,
2833 [
2834 [48, 117, -148] ,
2835 [118, 118, 191] ,
2836 [119, 122, 74]
2837 ] ,
2838 [
2839 [48, 122, -35]
2840 ] ,
2841 [
2842 [48, 107, -31] ,
2843 [108, 108, 192] ,
2844 [109, 122, 74]
2845 ] ,
2846 [
2847 [48, 115, -80] ,
2848 [116, 116, 193] ,
2849 [117, 122, 74]
2850 ] ,
2851 [
2852 [0, 255, -47]
2853 ] ,
2854 [
2855 [48, 115, -80] ,
2856 [116, 116, 194] ,
2857 [117, 122, 74]
2858 ] ,
2859 [
2860 [48, 113, -30] ,
2861 [114, 114, 195] ,
2862 [115, 122, 74]
2863 ] ,
2864 [
2865 [48, 113, -30] ,
2866 [114, 114, 196] ,
2867 [115, 122, 74]
2868 ] ,
2869 [
2870 [48, 122, -35]
2871 ] ,
2872 [
2873 [48, 106, -147] ,
2874 [107, 107, 197] ,
2875 [108, 122, 74]
2876 ] ,
2877 [
2878 [48, 114, -79] ,
2879 [115, 115, 198] ,
2880 [116, 122, 74]
2881 ] ,
2882 [
2883 [48, 104, -92] ,
2884 [105, 105, 199] ,
2885 [106, 122, 74]
2886 ] ,
2887 [
2888 [48, 122, -35]
2889 ] ,
2890 [
2891 [48, 113, -30] ,
2892 [114, 114, 200] ,
2893 [115, 122, 74]
2894 ] ,
2895 [
2896 [48, 100, -37] ,
2897 [101, 101, 201] ,
2898 [102, 122, 74]
2899 ] ,
2900 [
2901 [48, 113, -30] ,
2902 [114, 114, 202] ,
2903 [115, 122, 74]
2904 ] ,
2905 [
2906 [48, 122, -35]
2907 ] ,
2908 [
2909 [48, 113, -30] ,
2910 [114, 114, 203] ,
2911 [115, 122, 74]
2912 ] ,
2913 [
2914 [48, 116, -107] ,
2915 [117, 117, 204] ,
2916 [118, 122, 74]
2917 ] ,
2918 [
2919 [48, 122, -35]
2920 ] ,
2921 [
2922 [48, 122, -35]
2923 ] ,
2924 [
2925 [48, 122, -35]
2926 ] ,
2927 [
2928 [48, 95, -29] ,
2929 [97, 97, 205] ,
2930 [98, 122, 74]
2931 ] ,
2932 [
2933 [48, 95, -29] ,
2934 [97, 97, 206] ,
2935 [98, 122, 74]
2936 ] ,
2937 [
2938 [48, 100, -37] ,
2939 [101, 101, 207] ,
2940 [102, 122, 74]
2941 ] ,
2942 [
2943 [48, 95, -29] ,
2944 [97, 97, 208] ,
2945 [98, 122, 74]
2946 ] ,
2947 [
2948 [48, 101, -36] ,
2949 [102, 102, 209] ,
2950 [103, 122, 74]
2951 ] ,
2952 [
2953 [48, 113, -30] ,
2954 [114, 114, 210] ,
2955 [115, 122, 74]
2956 ] ,
2957 [
2958 [48, 122, -35]
2959 ] ,
2960 [
2961 [48, 104, -92] ,
2962 [105, 105, 211] ,
2963 [106, 122, 74]
2964 ] ,
2965 [
2966 [48, 113, -30] ,
2967 [114, 114, 212] ,
2968 [115, 122, 74]
2969 ] ,
2970 [
2971 [48, 122, -35]
2972 ] ,
2973 [
2974 [48, 122, -35]
2975 ] ,
2976 [
2977 [48, 122, -35]
2978 ] ,
2979 [
2980 [48, 100, -37] ,
2981 [101, 101, 213] ,
2982 [102, 122, 74]
2983 ] ,
2984 [
2985 [48, 100, -37] ,
2986 [101, 101, 214] ,
2987 [102, 122, 74]
2988 ] ,
2989 [
2990 [48, 95, -29] ,
2991 [97, 97, 215] ,
2992 [98, 122, 74]
2993 ] ,
2994 [
2995 [48, 122, -35]
2996 ] ,
2997 [
2998 [48, 95, -29] ,
2999 [97, 97, 216] ,
3000 [98, 122, 74]
3001 ] ,
3002 [
3003 [48, 115, -80] ,
3004 [116, 116, 217] ,
3005 [117, 122, 74]
3006 ] ,
3007 [
3008 [48, 122, -35]
3009 ] ,
3010 [
3011 [48, 122, -35]
3012 ] ,
3013 [
3014 [48, 109, -39] ,
3015 [110, 110, 218] ,
3016 [111, 122, 74]
3017 ] ,
3018 [
3019 [48, 109, -39] ,
3020 [110, 110, 219] ,
3021 [111, 122, 74]
3022 ] ,
3023 [
3024 [48, 122, -35]
3025 ] ,
3026 [
3027 [48, 115, -80] ,
3028 [116, 116, 220] ,
3029 [117, 122, 74]
3030 ] ,
3031 [
3032 [48, 101, -36] ,
3033 [102, 102, 221] ,
3034 [103, 109, 74] ,
3035 [110, 110, 222] ,
3036 [111, 122, 74]
3037 ] ,
3038 [
3039 [48, 99, -78] ,
3040 [100, 100, 223] ,
3041 [101, 122, 74]
3042 ] ,
3043 [
3044 [48, 95, -29] ,
3045 [97, 102, 74] ,
3046 [103, 103, 224] ,
3047 [104, 122, 74]
3048 ] ,
3049 [
3050 [48, 115, -80] ,
3051 [116, 116, 225] ,
3052 [117, 122, 74]
3053 ] ,
3054 [
3055 [48, 98, -98] ,
3056 [99, 99, 226] ,
3057 [100, 122, 74]
3058 ] ,
3059 [
3060 [48, 97, -29] ,
3061 [98, 98, 227] ,
3062 [99, 122, 74]
3063 ] ,
3064 [
3065 [48, 122, -35]
3066 ] ,
3067 [
3068 [48, 109, -39] ,
3069 [110, 110, 228] ,
3070 [111, 122, 74]
3071 ] ,
3072 [
3073 [48, 95, -29] ,
3074 [97, 97, 229] ,
3075 [98, 122, 74]
3076 ] ,
3077 [
3078 [48, 122, -35]
3079 ] ,
3080 [
3081 [48, 113, -30] ,
3082 [114, 114, 230] ,
3083 [115, 122, 74]
3084 ] ,
3085 [
3086 [48, 122, -35]
3087 ] ,
3088 [
3089 [48, 97, -29] ,
3090 [98, 98, 231] ,
3091 [99, 122, 74]
3092 ] ,
3093 [
3094 [48, 98, -98] ,
3095 [99, 99, 232] ,
3096 [100, 122, 74]
3097 ] ,
3098 [
3099 [48, 122, -35]
3100 ] ,
3101 [
3102 [48, 116, -107] ,
3103 [117, 117, 233] ,
3104 [118, 122, 74]
3105 ] ,
3106 [
3107 [48, 122, -35]
3108 ] ,
3109 [
3110 [48, 122, -35]
3111 ] ,
3112 [
3113 [48, 95, -29] ,
3114 [97, 97, 234] ,
3115 [98, 122, 74]
3116 ] ,
3117 [
3118 [48, 122, -35]
3119 ] ,
3120 [
3121 [48, 100, -37] ,
3122 [101, 101, 235] ,
3123 [102, 122, 74]
3124 ] ,
3125 [
3126 [48, 100, -37] ,
3127 [101, 101, 236] ,
3128 [102, 122, 74]
3129 ] ,
3130 [
3131 [48, 100, -37] ,
3132 [101, 101, 237] ,
3133 [102, 122, 74]
3134 ] ,
3135 [
3136 [48, 115, -80] ,
3137 [116, 116, 238] ,
3138 [117, 122, 74]
3139 ] ,
3140 [
3141 [48, 107, -31] ,
3142 [108, 108, 239] ,
3143 [109, 122, 74]
3144 ] ,
3145 [
3146 [48, 122, -35]
3147 ] ,
3148 [
3149 [48, 107, -31] ,
3150 [108, 108, 240] ,
3151 [109, 122, 74]
3152 ] ,
3153 [
3154 [48, 114, -79] ,
3155 [115, 115, 241] ,
3156 [116, 122, 74]
3157 ] ,
3158 [
3159 [48, 107, -31] ,
3160 [108, 108, 242] ,
3161 [109, 122, 74]
3162 ] ,
3163 [
3164 [48, 115, -80] ,
3165 [116, 116, 243] ,
3166 [117, 122, 74]
3167 ] ,
3168 [
3169 [48, 100, -37] ,
3170 [101, 101, 244] ,
3171 [102, 122, 74]
3172 ] ,
3173 [
3174 [48, 98, -98] ,
3175 [99, 99, 245] ,
3176 [100, 122, 74]
3177 ] ,
3178 [
3179 [48, 122, -35]
3180 ] ,
3181 [
3182 [48, 122, -35]
3183 ] ,
3184 [
3185 [48, 122, -35]
3186 ] ,
3187 [
3188 [48, 100, -37] ,
3189 [101, 101, 246] ,
3190 [102, 122, 74]
3191 ] ,
3192 [
3193 [48, 100, -37] ,
3194 [101, 101, 247] ,
3195 [102, 122, 74]
3196 ] ,
3197 [
3198 [48, 122, -35]
3199 ] ,
3200 [
3201 [48, 95, -29] ,
3202 [97, 97, 248] ,
3203 [98, 122, 74]
3204 ] ,
3205 [
3206 [48, 100, -37] ,
3207 [101, 101, 249] ,
3208 [102, 122, 74]
3209 ] ,
3210 [
3211 [48, 122, -35]
3212 ] ,
3213 [
3214 [48, 122, -35]
3215 ] ,
3216 [
3217 [48, 100, -37] ,
3218 [101, 101, 250] ,
3219 [102, 122, 74]
3220 ] ,
3221 [
3222 [48, 99, -78] ,
3223 [100, 100, 251] ,
3224 [101, 122, 74]
3225 ] ,
3226 [
3227 [48, 122, -35]
3228 ] ,
3229 [
3230 [48, 107, -31] ,
3231 [108, 108, 252] ,
3232 [109, 122, 74]
3233 ] ,
3234 [
3235 [48, 122, -35]
3236 ] ,
3237 [
3238 [48, 122, -35]
3239 ] ,
3240 [
3241 [48, 122, -35]
3242 ] ,
3243 [
3244 [48, 122, -35]
3245 ]
3246 ]
3247 ]
3248 end
3249
3250 private meth nil_array: Array[Array[Int]]
3251 do
3252 return once new Array[Array[Int]]
3253 end
3254
3255 attr _accept_table: Array[Array[Int]]
3256 private meth build_accept_table do
3257 _accept_table = once [
3258 [
3259 -1 , 0 , 1 , 1 , 0 , -1 , -1 , -1 , 66 , -1 , 49 , 50 , 64 , 62 , 53 , 63 , 61 , 65 , 77 , 54 , 69 , 56 , 71 , 74 , 51 , 52 , -1 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , -1 , 1 , 68 , -1 , 80 , -1 , 81 , -1 , 2 , 2 , -1 , 79 , 57 , 58 , 60 , 78 , -1 , 55 , 70 , 67 , 72 , 74 , 74 , 74 , 74 , 76 , 75 , 75 , 75 , 75 , 75 , 75 , 48 , 75 , 75 , 75 , 75 , 17 , 75 , 75 , 75 , 75 , 75 , 26 , 75 , 31 , 16 , 75 , 75 , 75 , 75 , 75 , 33 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , -1 , 83 , -1 , 82 , -1 , 2 , 59 , 73 , 76 , 76 , 76 , 76 , 75 , 75 , 32 , 75 , 75 , 75 , 75 , 75 , 75 , 10 , 75 , 75 , 30 , 75 , 75 , 75 , 41 , 75 , 40 , 34 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 20 , 75 , 75 , -1 , 75 , 75 , 75 , 13 , 75 , 75 , 75 , 28 , 75 , 75 , 75 , 14 , 75 , 75 , 11 , 47 , 42 , 75 , 75 , 75 , 75 , 75 , 75 , 44 , 75 , 75 , 27 , 45 , 12 , 75 , 75 , 75 , 38 , 75 , 75 , 37 , 5 , 75 , 75 , 46 , 75 , 75 , 75 , 75 , 75 , 75 , 75 , 15 , 75 , 75 , 43 , 75 , 29 , 75 , 75 , 39 , 75 , 22 , 4 , 75 , 21 , 75 , 75 , 75 , 75 , 75 , 35 , 75 , 75 , 75 , 75 , 75 , 75 , 25 , 3 , 24 , 75 , 75 , 9 , 75 , 75 , 6 , 36 , 75 , 75 , 18 , 75 , 19 , 7 , 23 , 8
3260
3261 ]
3262 ]
3263 end
3264 end
3265