parser: regenerate with safe call `x?.foo`
[nit.git] / src / parser / lexer.nit
index 96d3ea4..efad425 100644 (file)
@@ -1,30 +1,11 @@
 # Lexer and its tokens.
 # This file was generated by SableCC (http://www.sablecc.org/).
-package lexer
+module lexer is generated, no_warning("missing-doc")
 
 intrude import parser_nodes
+intrude import lexer_work
 private import tables
 
-redef class Token
-    var _text: nullable String
-
-    redef fun text
-    do
-        var res = _text
-        if res != null then return res
-        res = location.text
-       _text = res
-       return res
-    end
-
-    redef fun text=(text)
-    do
-        _text = text
-    end
-
-    fun parser_index: Int is abstract
-end
-
 redef class TEol
     redef fun parser_index: Int
     do
@@ -49,7 +30,7 @@ redef class TComment
     end
 end
 
-redef class TKwmodule
+redef class TKwpackage
     redef fun parser_index: Int
     do
        return 2
@@ -61,7 +42,7 @@ redef class TKwmodule
     end
 end
 
-redef class TKwimport
+redef class TKwmodule
     redef fun parser_index: Int
     do
        return 3
@@ -73,7 +54,7 @@ redef class TKwimport
     end
 end
 
-redef class TKwclass
+redef class TKwimport
     redef fun parser_index: Int
     do
        return 4
@@ -85,7 +66,7 @@ redef class TKwclass
     end
 end
 
-redef class TKwabstract
+redef class TKwclass
     redef fun parser_index: Int
     do
        return 5
@@ -97,7 +78,7 @@ redef class TKwabstract
     end
 end
 
-redef class TKwinterface
+redef class TKwabstract
     redef fun parser_index: Int
     do
        return 6
@@ -109,7 +90,7 @@ redef class TKwinterface
     end
 end
 
-redef class TKwenum
+redef class TKwinterface
     redef fun parser_index: Int
     do
        return 7
@@ -121,7 +102,7 @@ redef class TKwenum
     end
 end
 
-redef class TKwend
+redef class TKwenum
     redef fun parser_index: Int
     do
        return 8
@@ -133,7 +114,7 @@ redef class TKwend
     end
 end
 
-redef class TKwmeth
+redef class TKwsubset
     redef fun parser_index: Int
     do
        return 9
@@ -145,7 +126,7 @@ redef class TKwmeth
     end
 end
 
-redef class TKwtype
+redef class TKwend
     redef fun parser_index: Int
     do
        return 10
@@ -157,7 +138,7 @@ redef class TKwtype
     end
 end
 
-redef class TKwinit
+redef class TKwmeth
     redef fun parser_index: Int
     do
        return 11
@@ -169,7 +150,7 @@ redef class TKwinit
     end
 end
 
-redef class TKwredef
+redef class TKwtype
     redef fun parser_index: Int
     do
        return 12
@@ -181,7 +162,7 @@ redef class TKwredef
     end
 end
 
-redef class TKwis
+redef class TKwinit
     redef fun parser_index: Int
     do
        return 13
@@ -193,7 +174,7 @@ redef class TKwis
     end
 end
 
-redef class TKwdo
+redef class TKwredef
     redef fun parser_index: Int
     do
        return 14
@@ -205,7 +186,7 @@ redef class TKwdo
     end
 end
 
-redef class TKwreadable
+redef class TKwis
     redef fun parser_index: Int
     do
        return 15
@@ -217,7 +198,7 @@ redef class TKwreadable
     end
 end
 
-redef class TKwwritable
+redef class TKwdo
     redef fun parser_index: Int
     do
        return 16
@@ -241,7 +222,7 @@ redef class TKwvar
     end
 end
 
-redef class TKwintern
+redef class TKwextern
     redef fun parser_index: Int
     do
        return 18
@@ -253,7 +234,7 @@ redef class TKwintern
     end
 end
 
-redef class TKwextern
+redef class TKwpublic
     redef fun parser_index: Int
     do
        return 19
@@ -421,7 +402,7 @@ redef class TKwnot
     end
 end
 
-redef class TKwreturn
+redef class TKwimplies
     redef fun parser_index: Int
     do
        return 33
@@ -433,7 +414,7 @@ redef class TKwreturn
     end
 end
 
-redef class TKwcontinue
+redef class TKwreturn
     redef fun parser_index: Int
     do
        return 34
@@ -445,7 +426,7 @@ redef class TKwcontinue
     end
 end
 
-redef class TKwbreak
+redef class TKwcontinue
     redef fun parser_index: Int
     do
        return 35
@@ -457,7 +438,7 @@ redef class TKwbreak
     end
 end
 
-redef class TKwabort
+redef class TKwbreak
     redef fun parser_index: Int
     do
        return 36
@@ -469,7 +450,7 @@ redef class TKwabort
     end
 end
 
-redef class TKwassert
+redef class TKwabort
     redef fun parser_index: Int
     do
        return 37
@@ -481,7 +462,7 @@ redef class TKwassert
     end
 end
 
-redef class TKwnew
+redef class TKwassert
     redef fun parser_index: Int
     do
        return 38
@@ -493,7 +474,7 @@ redef class TKwnew
     end
 end
 
-redef class TKwisa
+redef class TKwnew
     redef fun parser_index: Int
     do
        return 39
@@ -505,7 +486,7 @@ redef class TKwisa
     end
 end
 
-redef class TKwonce
+redef class TKwisa
     redef fun parser_index: Int
     do
        return 40
@@ -517,7 +498,7 @@ redef class TKwonce
     end
 end
 
-redef class TKwsuper
+redef class TKwonce
     redef fun parser_index: Int
     do
        return 41
@@ -529,7 +510,7 @@ redef class TKwsuper
     end
 end
 
-redef class TKwself
+redef class TKwsuper
     redef fun parser_index: Int
     do
        return 42
@@ -541,7 +522,7 @@ redef class TKwself
     end
 end
 
-redef class TKwtrue
+redef class TKwself
     redef fun parser_index: Int
     do
        return 43
@@ -553,7 +534,7 @@ redef class TKwtrue
     end
 end
 
-redef class TKwfalse
+redef class TKwtrue
     redef fun parser_index: Int
     do
        return 44
@@ -565,7 +546,7 @@ redef class TKwfalse
     end
 end
 
-redef class TKwnull
+redef class TKwfalse
     redef fun parser_index: Int
     do
        return 45
@@ -577,7 +558,7 @@ redef class TKwnull
     end
 end
 
-redef class TKwas
+redef class TKwnull
     redef fun parser_index: Int
     do
        return 46
@@ -589,7 +570,7 @@ redef class TKwas
     end
 end
 
-redef class TKwnullable
+redef class TKwas
     redef fun parser_index: Int
     do
        return 47
@@ -601,7 +582,7 @@ redef class TKwnullable
     end
 end
 
-redef class TKwisset
+redef class TKwnullable
     redef fun parser_index: Int
     do
        return 48
@@ -613,7 +594,7 @@ redef class TKwisset
     end
 end
 
-redef class TKwlabel
+redef class TKwisset
     redef fun parser_index: Int
     do
        return 49
@@ -625,7 +606,7 @@ redef class TKwlabel
     end
 end
 
-redef class TKwdebug
+redef class TKwlabel
     redef fun parser_index: Int
     do
        return 50
@@ -637,7 +618,7 @@ redef class TKwdebug
     end
 end
 
-redef class TOpar
+redef class TKwwith
     redef fun parser_index: Int
     do
        return 51
@@ -649,7 +630,7 @@ redef class TOpar
     end
 end
 
-redef class TCpar
+redef class TKwdebug
     redef fun parser_index: Int
     do
        return 52
@@ -661,7 +642,7 @@ redef class TCpar
     end
 end
 
-redef class TObra
+redef class TKwyield
     redef fun parser_index: Int
     do
        return 53
@@ -673,7 +654,7 @@ redef class TObra
     end
 end
 
-redef class TCbra
+redef class TKwcatch
     redef fun parser_index: Int
     do
        return 54
@@ -685,7 +666,7 @@ redef class TCbra
     end
 end
 
-redef class TComma
+redef class TOpar
     redef fun parser_index: Int
     do
        return 55
@@ -697,7 +678,7 @@ redef class TComma
     end
 end
 
-redef class TColumn
+redef class TCpar
     redef fun parser_index: Int
     do
        return 56
@@ -709,7 +690,7 @@ redef class TColumn
     end
 end
 
-redef class TQuad
+redef class TObra
     redef fun parser_index: Int
     do
        return 57
@@ -721,7 +702,7 @@ redef class TQuad
     end
 end
 
-redef class TAssign
+redef class TCbra
     redef fun parser_index: Int
     do
        return 58
@@ -733,7 +714,7 @@ redef class TAssign
     end
 end
 
-redef class TPluseq
+redef class TComma
     redef fun parser_index: Int
     do
        return 59
@@ -745,7 +726,7 @@ redef class TPluseq
     end
 end
 
-redef class TMinuseq
+redef class TColumn
     redef fun parser_index: Int
     do
        return 60
@@ -757,7 +738,7 @@ redef class TMinuseq
     end
 end
 
-redef class TDotdotdot
+redef class TQuad
     redef fun parser_index: Int
     do
        return 61
@@ -769,7 +750,7 @@ redef class TDotdotdot
     end
 end
 
-redef class TDotdot
+redef class TAssign
     redef fun parser_index: Int
     do
        return 62
@@ -781,7 +762,7 @@ redef class TDotdot
     end
 end
 
-redef class TDot
+redef class TPluseq
     redef fun parser_index: Int
     do
        return 63
@@ -793,7 +774,7 @@ redef class TDot
     end
 end
 
-redef class TPlus
+redef class TMinuseq
     redef fun parser_index: Int
     do
        return 64
@@ -805,7 +786,7 @@ redef class TPlus
     end
 end
 
-redef class TMinus
+redef class TStareq
     redef fun parser_index: Int
     do
        return 65
@@ -817,7 +798,7 @@ redef class TMinus
     end
 end
 
-redef class TStar
+redef class TSlasheq
     redef fun parser_index: Int
     do
        return 66
@@ -829,7 +810,7 @@ redef class TStar
     end
 end
 
-redef class TSlash
+redef class TPercenteq
     redef fun parser_index: Int
     do
        return 67
@@ -841,7 +822,7 @@ redef class TSlash
     end
 end
 
-redef class TPercent
+redef class TStarstareq
     redef fun parser_index: Int
     do
        return 68
@@ -853,7 +834,7 @@ redef class TPercent
     end
 end
 
-redef class TEq
+redef class TPipeeq
     redef fun parser_index: Int
     do
        return 69
@@ -865,7 +846,7 @@ redef class TEq
     end
 end
 
-redef class TNe
+redef class TCareteq
     redef fun parser_index: Int
     do
        return 70
@@ -877,7 +858,7 @@ redef class TNe
     end
 end
 
-redef class TLt
+redef class TAmpeq
     redef fun parser_index: Int
     do
        return 71
@@ -889,7 +870,7 @@ redef class TLt
     end
 end
 
-redef class TLe
+redef class TLleq
     redef fun parser_index: Int
     do
        return 72
@@ -901,7 +882,7 @@ redef class TLe
     end
 end
 
-redef class TLl
+redef class TGgeq
     redef fun parser_index: Int
     do
        return 73
@@ -913,7 +894,7 @@ redef class TLl
     end
 end
 
-redef class TGt
+redef class TDotdotdot
     redef fun parser_index: Int
     do
        return 74
@@ -925,7 +906,7 @@ redef class TGt
     end
 end
 
-redef class TGe
+redef class TDotdot
     redef fun parser_index: Int
     do
        return 75
@@ -937,7 +918,7 @@ redef class TGe
     end
 end
 
-redef class TGg
+redef class TDot
     redef fun parser_index: Int
     do
        return 76
@@ -949,7 +930,7 @@ redef class TGg
     end
 end
 
-redef class TStarship
+redef class TPlus
     redef fun parser_index: Int
     do
        return 77
@@ -961,7 +942,7 @@ redef class TStarship
     end
 end
 
-redef class TBang
+redef class TMinus
     redef fun parser_index: Int
     do
        return 78
@@ -973,7 +954,7 @@ redef class TBang
     end
 end
 
-redef class TAt
+redef class TStar
     redef fun parser_index: Int
     do
        return 79
@@ -985,7 +966,7 @@ redef class TAt
     end
 end
 
-redef class TClassid
+redef class TStarstar
     redef fun parser_index: Int
     do
        return 80
@@ -997,7 +978,7 @@ redef class TClassid
     end
 end
 
-redef class TId
+redef class TSlash
     redef fun parser_index: Int
     do
        return 81
@@ -1009,7 +990,7 @@ redef class TId
     end
 end
 
-redef class TAttrid
+redef class TPercent
     redef fun parser_index: Int
     do
        return 82
@@ -1021,7 +1002,7 @@ redef class TAttrid
     end
 end
 
-redef class TNumber
+redef class TPipe
     redef fun parser_index: Int
     do
        return 83
@@ -1033,7 +1014,7 @@ redef class TNumber
     end
 end
 
-redef class TFloat
+redef class TCaret
     redef fun parser_index: Int
     do
        return 84
@@ -1045,7 +1026,7 @@ redef class TFloat
     end
 end
 
-redef class TString
+redef class TAmp
     redef fun parser_index: Int
     do
        return 85
@@ -1057,7 +1038,7 @@ redef class TString
     end
 end
 
-redef class TStartString
+redef class TTilde
     redef fun parser_index: Int
     do
        return 86
@@ -1069,7 +1050,7 @@ redef class TStartString
     end
 end
 
-redef class TMidString
+redef class TEq
     redef fun parser_index: Int
     do
        return 87
@@ -1081,7 +1062,7 @@ redef class TMidString
     end
 end
 
-redef class TEndString
+redef class TNe
     redef fun parser_index: Int
     do
        return 88
@@ -1093,7 +1074,7 @@ redef class TEndString
     end
 end
 
-redef class TChar
+redef class TLt
     redef fun parser_index: Int
     do
        return 89
@@ -1105,7 +1086,7 @@ redef class TChar
     end
 end
 
-redef class TBadString
+redef class TLe
     redef fun parser_index: Int
     do
        return 90
@@ -1117,7 +1098,7 @@ redef class TBadString
     end
 end
 
-redef class TBadChar
+redef class TLl
     redef fun parser_index: Int
     do
        return 91
@@ -1129,7 +1110,7 @@ redef class TBadChar
     end
 end
 
-redef class TExternCodeSegment
+redef class TGt
     redef fun parser_index: Int
     do
        return 92
@@ -1141,8 +1122,7 @@ redef class TExternCodeSegment
     end
 end
 
-
-redef class EOF
+redef class TGe
     redef fun parser_index: Int
     do
        return 93
@@ -1150,499 +1130,619 @@ redef class EOF
 
     init init_tk(loc: Location)
     do
-        _text = ""
                _location = loc
     end
 end
 
-redef class AError
-    readable var _message: String
+redef class TGg
+    redef fun parser_index: Int
+    do
+       return 94
+    end
 
-    init init_error(message: String, loc: Location)
+    init init_tk(loc: Location)
     do
-               init_tk(loc)
-               _message = message
+               _location = loc
     end
 end
 
-redef class ALexerError
-    readable var _string: String
+redef class TStarship
+    redef fun parser_index: Int
+    do
+       return 95
+    end
 
-    init init_lexer_error(message: String, loc: Location, string: String)
+    init init_tk(loc: Location)
     do
-               init_error(message, loc)
-               _string = string
+               _location = loc
     end
 end
 
-redef class AParserError
-    readable var _token: Token
+redef class TBang
+    redef fun parser_index: Int
+    do
+       return 96
+    end
 
-    init init_parser_error(message: String, loc: Location, token: Token)
+    init init_tk(loc: Location)
     do
-               init_error(message, loc)
-               _token = token
+               _location = loc
     end
 end
 
-# The lexer extract NIT tokens from an input stream.
-# It is better user with the Parser
-class Lexer
-       super TablesCapable
-       # Last peeked token
-       var _token: nullable Token
+redef class TQuest
+    redef fun parser_index: Int
+    do
+       return 97
+    end
 
-       # Lexer current state
-       var _state: Int = 0
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
 
-       # The source file
-       readable var _file: SourceFile
+redef class TAt
+    redef fun parser_index: Int
+    do
+       return 98
+    end
 
-       # Current character in the stream
-       var _stream_pos: Int = 0
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
 
-       # Current line number in the input stream
-       var _line: Int = 0
+redef class TSemi
+    redef fun parser_index: Int
+    do
+       return 99
+    end
 
-       # Current column in the input stream
-       var _pos: Int = 0
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
 
-       # Was the last character a cariage-return?
-       var _cr: Bool = false
+redef class TClassid
+    redef fun parser_index: Int
+    do
+       return 100
+    end
 
-       # Constante state values
-       private fun state_initial: Int do return 0 end
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
 
-       # Create a new lexer for a stream (and a name)
-       init(file: SourceFile)
-       do
-               _file = file
-       end
+redef class TId
+    redef fun parser_index: Int
+    do
+       return 101
+    end
 
-       # The last peeked token to chain them
-       private var last_token: nullable Token = null
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
 
-       # Give the next token (but do not consume it)
-       fun peek: Token
-       do
-               var t = _token
-               if t != null then return t
+redef class TAttrid
+    redef fun parser_index: Int
+    do
+       return 102
+    end
 
-               t = get_token
-               while t == null do t = get_token
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
 
-               var l = last_token
-               if l != null then
-                       l.next_token = t
-                       t.prev_token = l
-               end
+redef class TInteger
+    redef fun parser_index: Int
+    do
+       return 103
+    end
 
-               last_token = t
-               _token = t
-               return t
-       end
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
 
-       # Give and consume the next token
-       fun next: Token
-       do
-               var result = peek
-               _token = null
-               return result
-       end
+redef class TFloat
+    redef fun parser_index: Int
+    do
+       return 104
+    end
 
-       # Primitive method to return a token, or return null if it is discarded
-       # Is used to implement `peek` and `next`
-       protected fun get_token: nullable Token
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TString
+    redef fun parser_index: Int
+    do
+       return 105
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TStartString
+    redef fun parser_index: Int
+    do
+       return 106
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TMidString
+    redef fun parser_index: Int
+    do
+       return 107
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TEndString
+    redef fun parser_index: Int
+    do
+       return 108
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TChar
+    redef fun parser_index: Int
+    do
+       return 109
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TBadString
+    redef fun parser_index: Int
+    do
+       return 110
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TBadTString
+    redef fun parser_index: Int
+    do
+       return 111
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TBadChar
+    redef fun parser_index: Int
+    do
+       return 112
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TExternCodeSegment
+    redef fun parser_index: Int
+    do
+       return 113
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+redef class TBadExtern
+    redef fun parser_index: Int
+    do
+       return 114
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
+
+redef class EOF
+    redef fun parser_index: Int
+    do
+       return 115
+    end
+end
+
+redef class Lexer
+       redef fun make_token(accept_token, location)
        do
-               var dfa_state = 0
-
-               var sp = _stream_pos
-               var start_stream_pos = sp
-               var start_pos = _pos
-               var start_line = _line
-               var string = _file.string
-               var string_len = string.length
-
-               var accept_state = -1
-               var accept_token = -1
-               var accept_length = -1
-               var accept_pos = -1
-               var accept_line = -1
-
-               loop
-                       if sp >= string_len then
-                               dfa_state = -1
-                       else
-                               var c = string[sp].ascii
-                               sp += 1
-
-                               var cr = _cr
-                               var line = _line
-                               var pos = _pos
-                               if c == 10 then
-                                       if cr then
-                                               cr = false
-                                               _file.line_starts[line] = sp
-                                       else
-                                               line = line + 1
-                                               pos = 0
-                                               _file.line_starts[line] = sp
-                                       end
-                               else if c == 13 then
-                                       line = line + 1
-                                       pos = 0
-                                       cr = true
-                                       _file.line_starts[line] = sp
-                               else
-                                       pos = pos + 1
-                                       cr = false
-                               end
-
-                               loop
-                                       var old_state = dfa_state
-                                       if dfa_state < -1 then
-                                               old_state = -2 - dfa_state
-                                       end
-
-                                       dfa_state = -1
-
-                                       var low = 0
-                                       var high = lexer_goto(old_state, 0) - 1
-
-                                       if high >= 0 then
-                                               while low <= high do
-                                                       var middle = (low + high) / 2
-                                                       var offset = middle * 3 + 1 # +1 because length is at 0
-
-                                                       if c < lexer_goto(old_state, offset) then
-                                                               high = middle - 1
-                                                       else if c > lexer_goto(old_state, offset+1) then
-                                                               low = middle + 1
-                                                       else
-                                                               dfa_state = lexer_goto(old_state, offset+2)
-                                                               break
-                                                       end
-                                               end
-                                       end
-                                       if dfa_state > -2 then break
-                               end
-
-                               _cr = cr
-                               _line = line
-                               _pos = pos
-                       end
-
-                       if dfa_state >= 0 then
-                               var tok = lexer_accept(dfa_state)
-                               if tok != -1 then
-                                       accept_state = dfa_state
-                                       accept_token = tok
-                                       accept_length = sp - start_stream_pos
-                                       accept_pos = _pos
-                                       accept_line = _line
-                               end
-                       else
-                               if accept_state != -1 then
-                                       var location = new Location(_file, start_line + 1, accept_line + 1, start_pos + 1, accept_pos)
-                                       _pos = accept_pos
-                                       _line = accept_line
-                                       _stream_pos = start_stream_pos + accept_length
-                                       if accept_token == 0 then
-                                               return null
-                                       end
-                                       if accept_token == 1 then
-                                               return new TEol.init_tk(location)
-                                       end
-                                       if accept_token == 2 then
-                                               return new TComment.init_tk(location)
-                                       end
-                                       if accept_token == 3 then
-                                               return new TKwmodule.init_tk(location)
-                                       end
-                                       if accept_token == 4 then
-                                               return new TKwimport.init_tk(location)
-                                       end
-                                       if accept_token == 5 then
-                                               return new TKwclass.init_tk(location)
-                                       end
-                                       if accept_token == 6 then
-                                               return new TKwabstract.init_tk(location)
-                                       end
-                                       if accept_token == 7 then
-                                               return new TKwinterface.init_tk(location)
-                                       end
-                                       if accept_token == 8 then
-                                               return new TKwenum.init_tk(location)
-                                       end
-                                       if accept_token == 9 then
-                                               return new TKwend.init_tk(location)
-                                       end
-                                       if accept_token == 10 then
-                                               return new TKwmeth.init_tk(location)
-                                       end
-                                       if accept_token == 11 then
-                                               return new TKwtype.init_tk(location)
-                                       end
-                                       if accept_token == 12 then
-                                               return new TKwinit.init_tk(location)
-                                       end
-                                       if accept_token == 13 then
-                                               return new TKwredef.init_tk(location)
-                                       end
-                                       if accept_token == 14 then
-                                               return new TKwis.init_tk(location)
-                                       end
-                                       if accept_token == 15 then
-                                               return new TKwdo.init_tk(location)
-                                       end
-                                       if accept_token == 16 then
-                                               return new TKwreadable.init_tk(location)
-                                       end
-                                       if accept_token == 17 then
-                                               return new TKwwritable.init_tk(location)
-                                       end
-                                       if accept_token == 18 then
-                                               return new TKwvar.init_tk(location)
-                                       end
-                                       if accept_token == 19 then
-                                               return new TKwintern.init_tk(location)
-                                       end
-                                       if accept_token == 20 then
-                                               return new TKwextern.init_tk(location)
-                                       end
-                                       if accept_token == 21 then
-                                               return new TKwprotected.init_tk(location)
-                                       end
-                                       if accept_token == 22 then
-                                               return new TKwprivate.init_tk(location)
-                                       end
-                                       if accept_token == 23 then
-                                               return new TKwintrude.init_tk(location)
-                                       end
-                                       if accept_token == 24 then
-                                               return new TKwif.init_tk(location)
-                                       end
-                                       if accept_token == 25 then
-                                               return new TKwthen.init_tk(location)
-                                       end
-                                       if accept_token == 26 then
-                                               return new TKwelse.init_tk(location)
-                                       end
-                                       if accept_token == 27 then
-                                               return new TKwwhile.init_tk(location)
-                                       end
-                                       if accept_token == 28 then
-                                               return new TKwloop.init_tk(location)
-                                       end
-                                       if accept_token == 29 then
-                                               return new TKwfor.init_tk(location)
-                                       end
-                                       if accept_token == 30 then
-                                               return new TKwin.init_tk(location)
-                                       end
-                                       if accept_token == 31 then
-                                               return new TKwand.init_tk(location)
-                                       end
-                                       if accept_token == 32 then
-                                               return new TKwor.init_tk(location)
-                                       end
-                                       if accept_token == 33 then
-                                               return new TKwnot.init_tk(location)
-                                       end
-                                       if accept_token == 34 then
-                                               return new TKwreturn.init_tk(location)
-                                       end
-                                       if accept_token == 35 then
-                                               return new TKwcontinue.init_tk(location)
-                                       end
-                                       if accept_token == 36 then
-                                               return new TKwbreak.init_tk(location)
-                                       end
-                                       if accept_token == 37 then
-                                               return new TKwabort.init_tk(location)
-                                       end
-                                       if accept_token == 38 then
-                                               return new TKwassert.init_tk(location)
-                                       end
-                                       if accept_token == 39 then
-                                               return new TKwnew.init_tk(location)
-                                       end
-                                       if accept_token == 40 then
-                                               return new TKwisa.init_tk(location)
-                                       end
-                                       if accept_token == 41 then
-                                               return new TKwonce.init_tk(location)
-                                       end
-                                       if accept_token == 42 then
-                                               return new TKwsuper.init_tk(location)
-                                       end
-                                       if accept_token == 43 then
-                                               return new TKwself.init_tk(location)
-                                       end
-                                       if accept_token == 44 then
-                                               return new TKwtrue.init_tk(location)
-                                       end
-                                       if accept_token == 45 then
-                                               return new TKwfalse.init_tk(location)
-                                       end
-                                       if accept_token == 46 then
-                                               return new TKwnull.init_tk(location)
-                                       end
-                                       if accept_token == 47 then
-                                               return new TKwas.init_tk(location)
-                                       end
-                                       if accept_token == 48 then
-                                               return new TKwnullable.init_tk(location)
-                                       end
-                                       if accept_token == 49 then
-                                               return new TKwisset.init_tk(location)
-                                       end
-                                       if accept_token == 50 then
-                                               return new TKwlabel.init_tk(location)
-                                       end
-                                       if accept_token == 51 then
-                                               return new TKwdebug.init_tk(location)
-                                       end
-                                       if accept_token == 52 then
-                                               return new TOpar.init_tk(location)
-                                       end
-                                       if accept_token == 53 then
-                                               return new TCpar.init_tk(location)
-                                       end
-                                       if accept_token == 54 then
-                                               return new TObra.init_tk(location)
-                                       end
-                                       if accept_token == 55 then
-                                               return new TCbra.init_tk(location)
-                                       end
-                                       if accept_token == 56 then
-                                               return new TComma.init_tk(location)
-                                       end
-                                       if accept_token == 57 then
-                                               return new TColumn.init_tk(location)
-                                       end
-                                       if accept_token == 58 then
-                                               return new TQuad.init_tk(location)
-                                       end
-                                       if accept_token == 59 then
-                                               return new TAssign.init_tk(location)
-                                       end
-                                       if accept_token == 60 then
-                                               return new TPluseq.init_tk(location)
-                                       end
-                                       if accept_token == 61 then
-                                               return new TMinuseq.init_tk(location)
-                                       end
-                                       if accept_token == 62 then
-                                               return new TDotdotdot.init_tk(location)
-                                       end
-                                       if accept_token == 63 then
-                                               return new TDotdot.init_tk(location)
-                                       end
-                                       if accept_token == 64 then
-                                               return new TDot.init_tk(location)
-                                       end
-                                       if accept_token == 65 then
-                                               return new TPlus.init_tk(location)
-                                       end
-                                       if accept_token == 66 then
-                                               return new TMinus.init_tk(location)
-                                       end
-                                       if accept_token == 67 then
-                                               return new TStar.init_tk(location)
-                                       end
-                                       if accept_token == 68 then
-                                               return new TSlash.init_tk(location)
-                                       end
-                                       if accept_token == 69 then
-                                               return new TPercent.init_tk(location)
-                                       end
-                                       if accept_token == 70 then
-                                               return new TEq.init_tk(location)
-                                       end
-                                       if accept_token == 71 then
-                                               return new TNe.init_tk(location)
-                                       end
-                                       if accept_token == 72 then
-                                               return new TLt.init_tk(location)
-                                       end
-                                       if accept_token == 73 then
-                                               return new TLe.init_tk(location)
-                                       end
-                                       if accept_token == 74 then
-                                               return new TLl.init_tk(location)
-                                       end
-                                       if accept_token == 75 then
-                                               return new TGt.init_tk(location)
-                                       end
-                                       if accept_token == 76 then
-                                               return new TGe.init_tk(location)
-                                       end
-                                       if accept_token == 77 then
-                                               return new TGg.init_tk(location)
-                                       end
-                                       if accept_token == 78 then
-                                               return new TStarship.init_tk(location)
-                                       end
-                                       if accept_token == 79 then
-                                               return new TBang.init_tk(location)
-                                       end
-                                       if accept_token == 80 then
-                                               return new TAt.init_tk(location)
-                                       end
-                                       if accept_token == 81 then
-                                               return new TClassid.init_tk(location)
-                                       end
-                                       if accept_token == 82 then
-                                               return new TId.init_tk(location)
-                                       end
-                                       if accept_token == 83 then
-                                               return new TAttrid.init_tk(location)
-                                       end
-                                       if accept_token == 84 then
-                                               return new TNumber.init_tk(location)
-                                       end
-                                       if accept_token == 85 then
-                                               return new TFloat.init_tk(location)
-                                       end
-                                       if accept_token == 86 then
-                                               return new TString.init_tk(location)
-                                       end
-                                       if accept_token == 87 then
-                                               return new TStartString.init_tk(location)
-                                       end
-                                       if accept_token == 88 then
-                                               return new TMidString.init_tk(location)
-                                       end
-                                       if accept_token == 89 then
-                                               return new TEndString.init_tk(location)
-                                       end
-                                       if accept_token == 90 then
-                                               return new TChar.init_tk(location)
-                                       end
-                                       if accept_token == 91 then
-                                               return new TBadString.init_tk(location)
-                                       end
-                                       if accept_token == 92 then
-                                               return new TBadChar.init_tk(location)
-                                       end
-                                       if accept_token == 93 then
-                                               return new TExternCodeSegment.init_tk(location)
-                                       end
-                               else
-                                       _stream_pos = sp
-                                       var location = new Location(_file, start_line + 1, start_line + 1, start_pos + 1, start_pos + 1)
-                                       if sp > start_stream_pos then
-                                               var text = string.substring(start_stream_pos, sp-start_stream_pos)
-                                               var token = new ALexerError.init_lexer_error("Syntax error: unknown token {text}.", location, text)
-                                               return token
-                                       else
-                                               var token = new EOF.init_tk(location)
-                                               return token
-                                       end
-                               end
-                       end
+               if accept_token == 1 then
+                       return new TEol.init_tk(location)
+               end
+               if accept_token == 2 then
+                       return new TComment.init_tk(location)
+               end
+               if accept_token == 3 then
+                       return new TKwpackage.init_tk(location)
+               end
+               if accept_token == 4 then
+                       return new TKwmodule.init_tk(location)
+               end
+               if accept_token == 5 then
+                       return new TKwimport.init_tk(location)
+               end
+               if accept_token == 6 then
+                       return new TKwclass.init_tk(location)
+               end
+               if accept_token == 7 then
+                       return new TKwabstract.init_tk(location)
+               end
+               if accept_token == 8 then
+                       return new TKwinterface.init_tk(location)
+               end
+               if accept_token == 9 then
+                       return new TKwenum.init_tk(location)
+               end
+               if accept_token == 10 then
+                       return new TKwsubset.init_tk(location)
+               end
+               if accept_token == 11 then
+                       return new TKwend.init_tk(location)
+               end
+               if accept_token == 12 then
+                       return new TKwmeth.init_tk(location)
+               end
+               if accept_token == 13 then
+                       return new TKwtype.init_tk(location)
+               end
+               if accept_token == 14 then
+                       return new TKwinit.init_tk(location)
+               end
+               if accept_token == 15 then
+                       return new TKwredef.init_tk(location)
+               end
+               if accept_token == 16 then
+                       return new TKwis.init_tk(location)
+               end
+               if accept_token == 17 then
+                       return new TKwdo.init_tk(location)
+               end
+               if accept_token == 18 then
+                       return new TKwvar.init_tk(location)
+               end
+               if accept_token == 19 then
+                       return new TKwextern.init_tk(location)
+               end
+               if accept_token == 20 then
+                       return new TKwpublic.init_tk(location)
+               end
+               if accept_token == 21 then
+                       return new TKwprotected.init_tk(location)
+               end
+               if accept_token == 22 then
+                       return new TKwprivate.init_tk(location)
+               end
+               if accept_token == 23 then
+                       return new TKwintrude.init_tk(location)
+               end
+               if accept_token == 24 then
+                       return new TKwif.init_tk(location)
+               end
+               if accept_token == 25 then
+                       return new TKwthen.init_tk(location)
+               end
+               if accept_token == 26 then
+                       return new TKwelse.init_tk(location)
+               end
+               if accept_token == 27 then
+                       return new TKwwhile.init_tk(location)
+               end
+               if accept_token == 28 then
+                       return new TKwloop.init_tk(location)
+               end
+               if accept_token == 29 then
+                       return new TKwfor.init_tk(location)
+               end
+               if accept_token == 30 then
+                       return new TKwin.init_tk(location)
+               end
+               if accept_token == 31 then
+                       return new TKwand.init_tk(location)
+               end
+               if accept_token == 32 then
+                       return new TKwor.init_tk(location)
+               end
+               if accept_token == 33 then
+                       return new TKwnot.init_tk(location)
+               end
+               if accept_token == 34 then
+                       return new TKwimplies.init_tk(location)
+               end
+               if accept_token == 35 then
+                       return new TKwreturn.init_tk(location)
+               end
+               if accept_token == 36 then
+                       return new TKwcontinue.init_tk(location)
+               end
+               if accept_token == 37 then
+                       return new TKwbreak.init_tk(location)
+               end
+               if accept_token == 38 then
+                       return new TKwabort.init_tk(location)
+               end
+               if accept_token == 39 then
+                       return new TKwassert.init_tk(location)
+               end
+               if accept_token == 40 then
+                       return new TKwnew.init_tk(location)
+               end
+               if accept_token == 41 then
+                       return new TKwisa.init_tk(location)
+               end
+               if accept_token == 42 then
+                       return new TKwonce.init_tk(location)
+               end
+               if accept_token == 43 then
+                       return new TKwsuper.init_tk(location)
+               end
+               if accept_token == 44 then
+                       return new TKwself.init_tk(location)
+               end
+               if accept_token == 45 then
+                       return new TKwtrue.init_tk(location)
+               end
+               if accept_token == 46 then
+                       return new TKwfalse.init_tk(location)
+               end
+               if accept_token == 47 then
+                       return new TKwnull.init_tk(location)
+               end
+               if accept_token == 48 then
+                       return new TKwas.init_tk(location)
+               end
+               if accept_token == 49 then
+                       return new TKwnullable.init_tk(location)
+               end
+               if accept_token == 50 then
+                       return new TKwisset.init_tk(location)
+               end
+               if accept_token == 51 then
+                       return new TKwlabel.init_tk(location)
+               end
+               if accept_token == 52 then
+                       return new TKwwith.init_tk(location)
+               end
+               if accept_token == 53 then
+                       return new TKwdebug.init_tk(location)
+               end
+               if accept_token == 54 then
+                       return new TKwyield.init_tk(location)
+               end
+               if accept_token == 55 then
+                       return new TKwcatch.init_tk(location)
+               end
+               if accept_token == 56 then
+                       return new TOpar.init_tk(location)
+               end
+               if accept_token == 57 then
+                       return new TCpar.init_tk(location)
+               end
+               if accept_token == 58 then
+                       return new TObra.init_tk(location)
+               end
+               if accept_token == 59 then
+                       return new TCbra.init_tk(location)
+               end
+               if accept_token == 60 then
+                       return new TComma.init_tk(location)
+               end
+               if accept_token == 61 then
+                       return new TColumn.init_tk(location)
+               end
+               if accept_token == 62 then
+                       return new TQuad.init_tk(location)
+               end
+               if accept_token == 63 then
+                       return new TAssign.init_tk(location)
+               end
+               if accept_token == 64 then
+                       return new TPluseq.init_tk(location)
+               end
+               if accept_token == 65 then
+                       return new TMinuseq.init_tk(location)
+               end
+               if accept_token == 66 then
+                       return new TStareq.init_tk(location)
+               end
+               if accept_token == 67 then
+                       return new TSlasheq.init_tk(location)
+               end
+               if accept_token == 68 then
+                       return new TPercenteq.init_tk(location)
+               end
+               if accept_token == 69 then
+                       return new TStarstareq.init_tk(location)
+               end
+               if accept_token == 70 then
+                       return new TPipeeq.init_tk(location)
+               end
+               if accept_token == 71 then
+                       return new TCareteq.init_tk(location)
+               end
+               if accept_token == 72 then
+                       return new TAmpeq.init_tk(location)
+               end
+               if accept_token == 73 then
+                       return new TLleq.init_tk(location)
+               end
+               if accept_token == 74 then
+                       return new TGgeq.init_tk(location)
+               end
+               if accept_token == 75 then
+                       return new TDotdotdot.init_tk(location)
+               end
+               if accept_token == 76 then
+                       return new TDotdot.init_tk(location)
+               end
+               if accept_token == 77 then
+                       return new TDot.init_tk(location)
+               end
+               if accept_token == 78 then
+                       return new TPlus.init_tk(location)
+               end
+               if accept_token == 79 then
+                       return new TMinus.init_tk(location)
+               end
+               if accept_token == 80 then
+                       return new TStar.init_tk(location)
+               end
+               if accept_token == 81 then
+                       return new TStarstar.init_tk(location)
+               end
+               if accept_token == 82 then
+                       return new TSlash.init_tk(location)
+               end
+               if accept_token == 83 then
+                       return new TPercent.init_tk(location)
+               end
+               if accept_token == 84 then
+                       return new TPipe.init_tk(location)
+               end
+               if accept_token == 85 then
+                       return new TCaret.init_tk(location)
+               end
+               if accept_token == 86 then
+                       return new TAmp.init_tk(location)
+               end
+               if accept_token == 87 then
+                       return new TTilde.init_tk(location)
+               end
+               if accept_token == 88 then
+                       return new TEq.init_tk(location)
+               end
+               if accept_token == 89 then
+                       return new TNe.init_tk(location)
+               end
+               if accept_token == 90 then
+                       return new TLt.init_tk(location)
+               end
+               if accept_token == 91 then
+                       return new TLe.init_tk(location)
+               end
+               if accept_token == 92 then
+                       return new TLl.init_tk(location)
+               end
+               if accept_token == 93 then
+                       return new TGt.init_tk(location)
+               end
+               if accept_token == 94 then
+                       return new TGe.init_tk(location)
+               end
+               if accept_token == 95 then
+                       return new TGg.init_tk(location)
+               end
+               if accept_token == 96 then
+                       return new TStarship.init_tk(location)
+               end
+               if accept_token == 97 then
+                       return new TBang.init_tk(location)
+               end
+               if accept_token == 98 then
+                       return new TQuest.init_tk(location)
+               end
+               if accept_token == 99 then
+                       return new TAt.init_tk(location)
+               end
+               if accept_token == 100 then
+                       return new TSemi.init_tk(location)
+               end
+               if accept_token == 101 then
+                       return new TClassid.init_tk(location)
+               end
+               if accept_token == 102 then
+                       return new TId.init_tk(location)
+               end
+               if accept_token == 103 then
+                       return new TAttrid.init_tk(location)
+               end
+               if accept_token == 104 then
+                       return new TInteger.init_tk(location)
+               end
+               if accept_token == 105 then
+                       return new TFloat.init_tk(location)
+               end
+               if accept_token == 106 then
+                       return new TString.init_tk(location)
+               end
+               if accept_token == 107 then
+                       return new TStartString.init_tk(location)
+               end
+               if accept_token == 108 then
+                       return new TMidString.init_tk(location)
+               end
+               if accept_token == 109 then
+                       return new TEndString.init_tk(location)
+               end
+               if accept_token == 110 then
+                       return new TChar.init_tk(location)
+               end
+               if accept_token == 111 then
+                       return new TBadString.init_tk(location)
+               end
+               if accept_token == 112 then
+                       return new TBadTString.init_tk(location)
+               end
+               if accept_token == 113 then
+                       return new TBadChar.init_tk(location)
+               end
+               if accept_token == 114 then
+                       return new TExternCodeSegment.init_tk(location)
+               end
+               if accept_token == 115 then
+                       return new TBadExtern.init_tk(location)
                end
+               abort # unknown token index `accept_token`
        end
 end