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