X-Git-Url: http://nitlanguage.org diff --git a/src/parser/lexer.nit b/src/parser/lexer.nit index 352c1e1..3c0f81c 100644 --- a/src/parser/lexer.nit +++ b/src/parser/lexer.nit @@ -3,13 +3,11 @@ package lexer intrude import parser_nodes +private import tables redef class Token - readable writable var _text: String - readable var _filename: String - readable var _line: Int - readable var _pos: Int - + readable var _text: String + fun parser_index: Int is abstract redef fun to_s: String do @@ -20,1316 +18,1181 @@ end redef class TEol redef fun parser_index: Int do - return 0 + return 0 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TComment redef fun parser_index: Int do - return 1 + return 1 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwpackage redef fun parser_index: Int do - return 2 + return 2 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "package" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwimport redef fun parser_index: Int do - return 3 + return 3 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "import" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwclass redef fun parser_index: Int do - return 4 + return 4 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "class" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwabstract redef fun parser_index: Int do - return 5 + return 5 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "abstract" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwinterface redef fun parser_index: Int do - return 6 + return 6 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "interface" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwuniversal redef fun parser_index: Int do - return 7 + return 7 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "universal" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwspecial redef fun parser_index: Int do - return 8 + return 8 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "special" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwend redef fun parser_index: Int do - return 9 + return 9 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "end" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwmeth redef fun parser_index: Int do - return 10 + return 10 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do - _text = text - _filename = fname - _line = line - _pos = pos + _text = once "fun" + _location = loc end end redef class TKwtype redef fun parser_index: Int do - return 11 + return 11 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "type" - _filename = fname - _line = line - _pos = pos - end -end - -redef class TKwattr - redef fun parser_index: Int - do - return 12 - end - - init init_tk(fname: String, line: Int, pos: Int) - do - _text = once "attr" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwinit redef fun parser_index: Int do - return 13 + return 12 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "init" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwredef redef fun parser_index: Int do - return 14 + return 13 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "redef" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwis redef fun parser_index: Int do - return 15 + return 14 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "is" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwdo redef fun parser_index: Int do - return 16 + return 15 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "do" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwreadable redef fun parser_index: Int do - return 17 + return 16 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "readable" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwwritable redef fun parser_index: Int do - return 18 + return 17 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "writable" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwvar redef fun parser_index: Int do - return 19 + return 18 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "var" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwintern redef fun parser_index: Int do - return 20 + return 19 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "intern" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwextern redef fun parser_index: Int do - return 21 + return 20 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "extern" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwprotected redef fun parser_index: Int do - return 22 + return 21 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "protected" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwprivate redef fun parser_index: Int do - return 23 + return 22 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "private" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwintrude redef fun parser_index: Int do - return 24 + return 23 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "intrude" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwif redef fun parser_index: Int do - return 25 + return 24 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "if" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwthen redef fun parser_index: Int do - return 26 + return 25 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "then" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwelse redef fun parser_index: Int do - return 27 + return 26 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "else" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwwhile redef fun parser_index: Int do - return 28 + return 27 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "while" - _filename = fname - _line = line - _pos = pos + _location = loc + end +end + +redef class TKwloop + redef fun parser_index: Int + do + return 28 + end + + init init_tk(loc: Location) + do + _text = once "loop" + _location = loc end end redef class TKwfor redef fun parser_index: Int do - return 29 + return 29 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "for" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwin redef fun parser_index: Int do - return 30 + return 30 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "in" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwand redef fun parser_index: Int do - return 31 + return 31 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "and" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwor redef fun parser_index: Int do - return 32 + return 32 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "or" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwnot redef fun parser_index: Int do - return 33 + return 33 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "not" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwreturn redef fun parser_index: Int do - return 34 + return 34 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "return" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwcontinue redef fun parser_index: Int do - return 35 + return 35 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "continue" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwbreak redef fun parser_index: Int do - return 36 + return 36 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "break" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwabort redef fun parser_index: Int do - return 37 + return 37 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "abort" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwassert redef fun parser_index: Int do - return 38 + return 38 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "assert" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwnew redef fun parser_index: Int do - return 39 + return 39 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "new" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwisa redef fun parser_index: Int do - return 40 + return 40 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "isa" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwonce redef fun parser_index: Int do - return 41 + return 41 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "once" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwsuper redef fun parser_index: Int do - return 42 + return 42 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "super" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwself redef fun parser_index: Int do - return 43 + return 43 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "self" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwtrue redef fun parser_index: Int do - return 44 + return 44 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "true" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwfalse redef fun parser_index: Int do - return 45 + return 45 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "false" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwnull redef fun parser_index: Int do - return 46 + return 46 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "null" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TKwas redef fun parser_index: Int do - return 47 + return 47 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "as" - _filename = fname - _line = line - _pos = pos + _location = loc end end -redef class TKwwith +redef class TKwnullable redef fun parser_index: Int do - return 48 + return 48 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do - _text = once "with" - _filename = fname - _line = line - _pos = pos + _text = once "nullable" + _location = loc end end -redef class TKwnullable +redef class TKwisset redef fun parser_index: Int do - return 49 + return 49 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do - _text = once "nullable" - _filename = fname - _line = line - _pos = pos + _text = once "isset" + _location = loc end end -redef class TKwisset +redef class TKwlabel redef fun parser_index: Int do - return 50 + return 50 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do - _text = once "isset" - _filename = fname - _line = line - _pos = pos + _text = once "label" + _location = loc end end redef class TOpar redef fun parser_index: Int do - return 51 + return 51 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "(" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TCpar redef fun parser_index: Int do - return 52 + return 52 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once ")" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TObra redef fun parser_index: Int do - return 53 + return 53 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "[" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TCbra redef fun parser_index: Int do - return 54 + return 54 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "]" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TComma redef fun parser_index: Int do - return 55 + return 55 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "," - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TColumn redef fun parser_index: Int do - return 56 + return 56 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once ":" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TQuad redef fun parser_index: Int do - return 57 + return 57 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "::" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TAssign redef fun parser_index: Int do - return 58 + return 58 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "=" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TPluseq redef fun parser_index: Int do - return 59 + return 59 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "+=" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TMinuseq redef fun parser_index: Int do - return 60 + return 60 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "-=" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TDotdotdot redef fun parser_index: Int do - return 61 + return 61 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "..." - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TDotdot redef fun parser_index: Int do - return 62 + return 62 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once ".." - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TDot redef fun parser_index: Int do - return 63 + return 63 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "." - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TPlus redef fun parser_index: Int do - return 64 + return 64 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "+" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TMinus redef fun parser_index: Int do - return 65 + return 65 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "-" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TStar redef fun parser_index: Int do - return 66 + return 66 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "*" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TSlash redef fun parser_index: Int do - return 67 + return 67 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "/" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TPercent redef fun parser_index: Int do - return 68 + return 68 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "%" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TEq redef fun parser_index: Int do - return 69 + return 69 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "==" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TNe redef fun parser_index: Int do - return 70 + return 70 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "!=" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TLt redef fun parser_index: Int do - return 71 + return 71 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "<" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TLe redef fun parser_index: Int do - return 72 + return 72 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "<=" - _filename = fname - _line = line - _pos = pos + _location = loc + end +end + +redef class TLl + redef fun parser_index: Int + do + return 73 + end + + init init_tk(loc: Location) + do + _text = once "<<" + _location = loc end end redef class TGt redef fun parser_index: Int do - return 73 + return 74 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once ">" - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TGe redef fun parser_index: Int do - return 74 + return 75 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once ">=" - _filename = fname - _line = line - _pos = pos + _location = loc + end +end + +redef class TGg + redef fun parser_index: Int + do + return 76 + end + + init init_tk(loc: Location) + do + _text = once ">>" + _location = loc end end redef class TStarship redef fun parser_index: Int do - return 75 + return 77 end - init init_tk(fname: String, line: Int, pos: Int) + init init_tk(loc: Location) do _text = once "<=>" - _filename = fname - _line = line - _pos = pos + _location = loc + end +end + +redef class TBang + redef fun parser_index: Int + do + return 78 + end + + init init_tk(loc: Location) + do + _text = once "!" + _location = loc end end redef class TClassid redef fun parser_index: Int do - return 76 + return 79 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TId redef fun parser_index: Int do - return 77 + return 80 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TAttrid redef fun parser_index: Int do - return 78 + return 81 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TNumber redef fun parser_index: Int do - return 79 + return 82 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TFloat redef fun parser_index: Int do - return 80 + return 83 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TChar redef fun parser_index: Int do - return 81 + return 84 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TString redef fun parser_index: Int do - return 82 + return 85 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TStartString redef fun parser_index: Int do - return 83 + return 86 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TMidString redef fun parser_index: Int do - return 84 + return 87 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end redef class TEndString redef fun parser_index: Int do - return 85 + return 88 end - init init_tk(text: String, fname: String, line: Int, pos: Int) + init init_tk(text: String, loc: Location) do _text = text - _filename = fname - _line = line - _pos = pos + _location = loc end end -redef class EOF +redef class EOF redef fun parser_index: Int do - return 86 + return 89 end - - init(fname: String, line: Int, pos: Int) + + init(loc: Location) do - _filename = fname _text = "" - _line = line - _pos = pos + _location = loc end end -redef class PError - readable writable var _message: String - - init init_error(fname: String, line: Int, pos: Int, message: String) +redef class AError + readable var _message: String + + init init_error(message: String, loc: Location) do - init(fname, line, pos) - _message = message + init(loc) + _message = message end end @@ -1337,6 +1200,7 @@ end # The lexer extract NIT tokens from an input stream. # It is better user with the Parser class Lexer +special TablesCapable # Last peeked token var _token: nullable Token @@ -1344,7 +1208,7 @@ class Lexer var _state: Int = 0 # Name of the stream (as given to tokens) - readable var _filename: String + readable var _filename: String # Input stream where character are read var _stream: IStream @@ -1381,8 +1245,6 @@ class Lexer _stream = stream _stream_pos = -1 _stream_buf = new Buffer - build_goto_table - build_accept_table end # Give the next token (but do not consume it) @@ -1419,34 +1281,35 @@ class Lexer var accept_pos = -1 var accept_line = -1 - var goto_table = _goto_table[_state] - var accept = _accept_table[_state] - _text.clear + var text = _text + text.clear - while true do + loop var c = get_char if c != -1 then + var cr = _cr + var line = _line + var pos = _pos if c == 10 then - if _cr then - _cr = false + if cr then + cr = false else - _line = _line + 1 - _pos = 0 + line = line + 1 + pos = 0 end else if c == 13 then - _line = _line + 1 - _pos = 0 - _cr = true + line = line + 1 + pos = 0 + cr = true else - _pos = _pos + 1 - _cr = false + pos = pos + 1 + cr = false end - _text.add(c.ascii) + text.add(c.ascii) - var first_loop = true # aka until - while dfa_state < -1 or first_loop do + loop var old_state = dfa_state if dfa_state < -1 then old_state = -2 - dfa_state @@ -1454,760 +1317,345 @@ class Lexer dfa_state = -1 - var tmp1 = goto_table[old_state] var low = 0 - var high = tmp1.length - 1 - - while low <= high do - var middle = (low + high) / 2 - var tmp2 = tmp1[middle] - - if c < tmp2[0] then - high = middle - 1 - else if c > tmp2[1] then - low = middle + 1 - else - dfa_state = tmp2[2] - low = high + 1 # aka break + 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 - first_loop = false # aka until + if dfa_state > -2 then break end + + _cr = cr + _line = line + _pos = pos else dfa_state = -1 end if dfa_state >= 0 then - if accept[dfa_state] != -1 then + var tok = lexer_accept(dfa_state) + if tok != -1 then accept_state = dfa_state - accept_token = accept[dfa_state] - accept_length = _text.length + accept_token = tok + accept_length = text.length accept_pos = _pos accept_line = _line end else if accept_state != -1 then + var location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) + _pos = accept_pos + _line = accept_line + push_back(accept_length) if accept_token == 0 then - push_back(accept_length) - _pos = accept_pos - _line = accept_line return null end if accept_token == 1 then - var token_text = _text.substring(0, accept_length) - var token = new TEol.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + var token_text = text.substring(0, accept_length) + return new TEol.init_tk(token_text, location) end if accept_token == 2 then - var token_text = _text.substring(0, accept_length) - var token = new TComment.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + var token_text = text.substring(0, accept_length) + return new TComment.init_tk(token_text, location) end if accept_token == 3 then - var token = new TKwpackage.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwpackage.init_tk(location) end if accept_token == 4 then - var token = new TKwimport.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwimport.init_tk(location) end if accept_token == 5 then - var token = new TKwclass.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwclass.init_tk(location) end if accept_token == 6 then - var token = new TKwabstract.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwabstract.init_tk(location) end if accept_token == 7 then - var token = new TKwinterface.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwinterface.init_tk(location) end if accept_token == 8 then - var token = new TKwuniversal.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwuniversal.init_tk(location) end if accept_token == 9 then - var token = new TKwspecial.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwspecial.init_tk(location) end if accept_token == 10 then - var token = new TKwend.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwend.init_tk(location) end if accept_token == 11 then - var token_text = _text.substring(0, accept_length) - var token = new TKwmeth.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwmeth.init_tk(location) end if accept_token == 12 then - var token = new TKwtype.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwtype.init_tk(location) end if accept_token == 13 then - var token = new TKwattr.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwinit.init_tk(location) end if accept_token == 14 then - var token = new TKwinit.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwredef.init_tk(location) end if accept_token == 15 then - var token = new TKwredef.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwis.init_tk(location) end if accept_token == 16 then - var token = new TKwis.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwdo.init_tk(location) end if accept_token == 17 then - var token = new TKwdo.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwreadable.init_tk(location) end if accept_token == 18 then - var token = new TKwreadable.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwwritable.init_tk(location) end if accept_token == 19 then - var token = new TKwwritable.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwvar.init_tk(location) end if accept_token == 20 then - var token = new TKwvar.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwintern.init_tk(location) end if accept_token == 21 then - var token = new TKwintern.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwextern.init_tk(location) end if accept_token == 22 then - var token = new TKwextern.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwprotected.init_tk(location) end if accept_token == 23 then - var token = new TKwprotected.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwprivate.init_tk(location) end if accept_token == 24 then - var token = new TKwprivate.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwintrude.init_tk(location) end if accept_token == 25 then - var token = new TKwintrude.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwif.init_tk(location) end if accept_token == 26 then - var token = new TKwif.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwthen.init_tk(location) end if accept_token == 27 then - var token = new TKwthen.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwelse.init_tk(location) end if accept_token == 28 then - var token = new TKwelse.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwwhile.init_tk(location) end if accept_token == 29 then - var token = new TKwwhile.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwloop.init_tk(location) end if accept_token == 30 then - var token = new TKwfor.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwfor.init_tk(location) end if accept_token == 31 then - var token = new TKwin.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwin.init_tk(location) end if accept_token == 32 then - var token = new TKwand.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwand.init_tk(location) end if accept_token == 33 then - var token = new TKwor.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwor.init_tk(location) end if accept_token == 34 then - var token = new TKwnot.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwnot.init_tk(location) end if accept_token == 35 then - var token = new TKwreturn.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwreturn.init_tk(location) end if accept_token == 36 then - var token = new TKwcontinue.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwcontinue.init_tk(location) end if accept_token == 37 then - var token = new TKwbreak.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwbreak.init_tk(location) end if accept_token == 38 then - var token = new TKwabort.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwabort.init_tk(location) end if accept_token == 39 then - var token = new TKwassert.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwassert.init_tk(location) end if accept_token == 40 then - var token = new TKwnew.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwnew.init_tk(location) end if accept_token == 41 then - var token = new TKwisa.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwisa.init_tk(location) end if accept_token == 42 then - var token = new TKwonce.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwonce.init_tk(location) end if accept_token == 43 then - var token = new TKwsuper.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwsuper.init_tk(location) end if accept_token == 44 then - var token = new TKwself.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwself.init_tk(location) end if accept_token == 45 then - var token = new TKwtrue.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwtrue.init_tk(location) end if accept_token == 46 then - var token = new TKwfalse.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwfalse.init_tk(location) end if accept_token == 47 then - var token = new TKwnull.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwnull.init_tk(location) end if accept_token == 48 then - var token = new TKwas.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwas.init_tk(location) end if accept_token == 49 then - var token = new TKwwith.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwnullable.init_tk(location) end if accept_token == 50 then - var token = new TKwnullable.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwisset.init_tk(location) end if accept_token == 51 then - var token = new TKwisset.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TKwlabel.init_tk(location) end if accept_token == 52 then - var token = new TOpar.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TOpar.init_tk(location) end if accept_token == 53 then - var token = new TCpar.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TCpar.init_tk(location) end if accept_token == 54 then - var token = new TObra.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TObra.init_tk(location) end if accept_token == 55 then - var token = new TCbra.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TCbra.init_tk(location) end if accept_token == 56 then - var token = new TComma.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TComma.init_tk(location) end if accept_token == 57 then - var token = new TColumn.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TColumn.init_tk(location) end if accept_token == 58 then - var token = new TQuad.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TQuad.init_tk(location) end if accept_token == 59 then - var token = new TAssign.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TAssign.init_tk(location) end if accept_token == 60 then - var token = new TPluseq.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TPluseq.init_tk(location) end if accept_token == 61 then - var token = new TMinuseq.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TMinuseq.init_tk(location) end if accept_token == 62 then - var token = new TDotdotdot.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TDotdotdot.init_tk(location) end if accept_token == 63 then - var token = new TDotdot.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TDotdot.init_tk(location) end if accept_token == 64 then - var token = new TDot.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TDot.init_tk(location) end if accept_token == 65 then - var token = new TPlus.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TPlus.init_tk(location) end if accept_token == 66 then - var token = new TMinus.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TMinus.init_tk(location) end if accept_token == 67 then - var token = new TStar.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TStar.init_tk(location) end if accept_token == 68 then - var token = new TSlash.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TSlash.init_tk(location) end if accept_token == 69 then - var token = new TPercent.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TPercent.init_tk(location) end if accept_token == 70 then - var token = new TEq.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TEq.init_tk(location) end if accept_token == 71 then - var token = new TNe.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TNe.init_tk(location) end if accept_token == 72 then - var token = new TLt.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TLt.init_tk(location) end if accept_token == 73 then - var token = new TLe.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TLe.init_tk(location) end if accept_token == 74 then - var token = new TGt.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TLl.init_tk(location) end if accept_token == 75 then - var token = new TGe.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TGt.init_tk(location) end if accept_token == 76 then - var token = new TStarship.init_tk(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TGe.init_tk(location) end if accept_token == 77 then - var token_text = _text.substring(0, accept_length) - var token = new TClassid.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TGg.init_tk(location) end if accept_token == 78 then - var token_text = _text.substring(0, accept_length) - var token = new TId.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TStarship.init_tk(location) end if accept_token == 79 then - var token_text = _text.substring(0, accept_length) - var token = new TAttrid.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + return new TBang.init_tk(location) end if accept_token == 80 then - var token_text = _text.substring(0, accept_length) - var token = new TNumber.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + var token_text = text.substring(0, accept_length) + return new TClassid.init_tk(token_text, location) end if accept_token == 81 then - var token_text = _text.substring(0, accept_length) - var token = new TFloat.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + var token_text = text.substring(0, accept_length) + return new TId.init_tk(token_text, location) end if accept_token == 82 then - var token_text = _text.substring(0, accept_length) - var token = new TChar.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + var token_text = text.substring(0, accept_length) + return new TAttrid.init_tk(token_text, location) end if accept_token == 83 then - var token_text = _text.substring(0, accept_length) - var token = new TString.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + var token_text = text.substring(0, accept_length) + return new TNumber.init_tk(token_text, location) end if accept_token == 84 then - var token_text = _text.substring(0, accept_length) - var token = new TStartString.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + var token_text = text.substring(0, accept_length) + return new TFloat.init_tk(token_text, location) end if accept_token == 85 then - var token_text = _text.substring(0, accept_length) - var token = new TMidString.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + var token_text = text.substring(0, accept_length) + return new TChar.init_tk(token_text, location) end if accept_token == 86 then - var token_text = _text.substring(0, accept_length) - var token = new TEndString.init_tk(token_text, _filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) - push_back(accept_length) - _pos = accept_pos - _line = accept_line - return token + var token_text = text.substring(0, accept_length) + return new TString.init_tk(token_text, location) + end + if accept_token == 87 then + var token_text = text.substring(0, accept_length) + return new TStartString.init_tk(token_text, location) + end + if accept_token == 88 then + var token_text = text.substring(0, accept_length) + return new TMidString.init_tk(token_text, location) + end + if accept_token == 89 then + var token_text = text.substring(0, accept_length) + return new TEndString.init_tk(token_text, location) end else - if _text.length > 0 then - var token = new PError.init_error(_filename, start_line + 1, start_pos + 1, "Unknown token: {_text}") - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) + var location = new Location(_filename, start_line + 1, start_line + 1, start_pos + 1, start_pos + 1) + if text.length > 0 then + var token = new AError.init_error("Syntax error: unknown token {text}.", location) return token else - var token = new EOF(_filename, start_line + 1, start_pos + 1) - token._location = new Location(_filename, start_line + 1, accept_line + 1, start_pos + 1, accept_pos) + var token = new EOF(location) return token end end end + if false then break # FIXME remove once unreach loop exits are in c_src end - return null + return null # FIXME remove once unreach loop exits are in c_src end # Read the next character. @@ -2249,1231 +1697,5 @@ class Lexer i = i - 1 end end - - var _goto_table: Array[Array[Array[Array[Int]]]] - private fun build_goto_table - do - _goto_table = once [ - [ - [ - [9, 9, 1] , - [10, 10, 2] , - [13, 13, 3] , - [32, 32, 4] , - [33, 33, 5] , - [34, 34, 6] , - [35, 35, 7] , - [37, 37, 8] , - [39, 39, 9] , - [40, 40, 10] , - [41, 41, 11] , - [42, 42, 12] , - [43, 43, 13] , - [44, 44, 14] , - [45, 45, 15] , - [46, 46, 16] , - [47, 47, 17] , - [48, 57, 18] , - [58, 58, 19] , - [60, 60, 20] , - [61, 61, 21] , - [62, 62, 22] , - [65, 90, 23] , - [91, 91, 24] , - [93, 93, 25] , - [95, 95, 26] , - [97, 97, 27] , - [98, 98, 28] , - [99, 99, 29] , - [100, 100, 30] , - [101, 101, 31] , - [102, 102, 32] , - [103, 104, 33] , - [105, 105, 34] , - [106, 108, 33] , - [109, 109, 35] , - [110, 110, 36] , - [111, 111, 37] , - [112, 112, 38] , - [113, 113, 33] , - [114, 114, 39] , - [115, 115, 40] , - [116, 116, 41] , - [117, 117, 42] , - [118, 118, 43] , - [119, 119, 44] , - [120, 122, 33] , - [125, 125, 45] - ] , - [ - [9, 9, 1] , - [32, 32, 4] - ] , - nil_array , - [ - [10, 10, 46] - ] , - [ - [9, 32, -3] - ] , - [ - [61, 61, 47] - ] , - [ - [0, 9, 48] , - [11, 12, 48] , - [14, 33, 48] , - [34, 34, 49] , - [35, 91, 48] , - [92, 92, 50] , - [93, 122, 48] , - [123, 123, 51] , - [124, 255, 48] - ] , - [ - [0, 9, 52] , - [10, 10, 53] , - [11, 12, 52] , - [13, 13, 54] , - [14, 255, 52] - ] , - nil_array , - [ - [0, 9, 55] , - [11, 12, 55] , - [14, 38, 55] , - [39, 39, 56] , - [40, 255, 55] - ] , - nil_array , - nil_array , - nil_array , - [ - [61, 61, 57] - ] , - nil_array , - [ - [61, 61, 58] - ] , - [ - [46, 46, 59] , - [48, 57, 60] - ] , - nil_array , - [ - [46, 46, 61] , - [48, 57, 18] - ] , - [ - [58, 58, 62] - ] , - [ - [61, 61, 63] - ] , - [ - [61, 61, 64] - ] , - [ - [61, 61, 65] - ] , - [ - [48, 57, 66] , - [65, 90, 67] , - [95, 95, 68] , - [97, 122, 69] - ] , - nil_array , - nil_array , - [ - [97, 122, 70] - ] , - [ - [48, 57, 71] , - [65, 90, 72] , - [95, 95, 73] , - [97, 97, 74] , - [98, 98, 75] , - [99, 109, 74] , - [110, 110, 76] , - [111, 114, 74] , - [115, 115, 77] , - [116, 116, 78] , - [117, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 113, 74] , - [114, 114, 79] , - [115, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 107, 74] , - [108, 108, 80] , - [109, 110, 74] , - [111, 111, 81] , - [112, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 110, 74] , - [111, 111, 82] , - [112, 122, 74] - ] , - [ - [48, 107, -31] , - [108, 108, 83] , - [109, 109, 74] , - [110, 110, 84] , - [111, 119, 74] , - [120, 120, 85] , - [121, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 97, 86] , - [98, 110, 74] , - [111, 111, 87] , - [112, 116, 74] , - [117, 117, 88] , - [118, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 101, 74] , - [102, 102, 89] , - [103, 108, 74] , - [109, 109, 90] , - [110, 110, 91] , - [111, 114, 74] , - [115, 115, 92] , - [116, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 100, 74] , - [101, 101, 93] , - [102, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 94] , - [102, 110, 74] , - [111, 111, 95] , - [112, 116, 74] , - [117, 117, 96] , - [118, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 109, 74] , - [110, 110, 97] , - [111, 113, 74] , - [114, 114, 98] , - [115, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 97, 99] , - [98, 113, 74] , - [114, 114, 100] , - [115, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 101] , - [102, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 102] , - [102, 111, 74] , - [112, 112, 103] , - [113, 116, 74] , - [117, 117, 104] , - [118, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 103, 74] , - [104, 104, 105] , - [105, 113, 74] , - [114, 114, 106] , - [115, 120, 74] , - [121, 121, 107] , - [122, 122, 74] - ] , - [ - [48, 109, -39] , - [110, 110, 108] , - [111, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 97, 109] , - [98, 122, 74] - ] , - [ - [48, 103, -43] , - [104, 104, 110] , - [105, 105, 111] , - [106, 113, 74] , - [114, 114, 112] , - [115, 122, 74] - ] , - [ - [0, 9, 113] , - [11, 12, 113] , - [14, 33, 113] , - [34, 34, 114] , - [35, 91, 113] , - [92, 92, 115] , - [93, 122, 113] , - [123, 123, 116] , - [124, 255, 113] - ] , - nil_array , - nil_array , - [ - [0, 255, -8] - ] , - nil_array , - [ - [0, 9, 117] , - [11, 12, 117] , - [14, 255, 117] - ] , - nil_array , - [ - [0, 255, -9] - ] , - nil_array , - [ - [10, 10, 118] - ] , - [ - [0, 255, -11] - ] , - nil_array , - nil_array , - nil_array , - [ - [46, 46, 119] - ] , - [ - [48, 57, 60] - ] , - [ - [48, 57, 60] - ] , - nil_array , - [ - [62, 62, 120] - ] , - nil_array , - nil_array , - [ - [48, 122, -25] - ] , - [ - [48, 122, -25] - ] , - [ - [48, 122, -25] - ] , - [ - [48, 122, -25] - ] , - [ - [48, 57, 121] , - [65, 90, 122] , - [95, 95, 123] , - [97, 122, 124] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 110, -32] , - [111, 111, 125] , - [112, 114, 74] , - [115, 115, 126] , - [116, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 99, 74] , - [100, 100, 127] , - [101, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 114, 74] , - [115, 115, 128] , - [116, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 115, 74] , - [116, 116, 129] , - [117, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 130] , - [102, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 97, 131] , - [98, 122, 74] - ] , - [ - [48, 109, -39] , - [110, 110, 132] , - [111, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 114, -79] , - [115, 115, 133] , - [116, 122, 74] - ] , - [ - [48, 99, -78] , - [100, 100, 134] , - [101, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 135] , - [117, 122, 74] - ] , - [ - [48, 107, -31] , - [108, 108, 136] , - [109, 122, 74] - ] , - [ - [48, 113, -30] , - [114, 114, 137] , - [115, 122, 74] - ] , - [ - [48, 109, -39] , - [110, 110, 138] , - [111, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 95, -29] , - [97, 111, 74] , - [112, 112, 139] , - [113, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 104, 74] , - [105, 105, 140] , - [106, 115, 74] , - [116, 116, 141] , - [117, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 97, 142] , - [98, 114, 74] , - [115, 115, 143] , - [116, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 144] , - [117, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 118, 74] , - [119, 119, 145] , - [120, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 146] , - [117, 122, 74] - ] , - [ - [48, 107, -31] , - [108, 108, 147] , - [109, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 98, 74] , - [99, 99, 148] , - [100, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 98, -99] , - [99, 99, 149] , - [100, 122, 74] - ] , - [ - [48, 104, -93] , - [105, 105, 150] , - [106, 110, 74] , - [111, 111, 151] , - [112, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 97, 152] , - [98, 99, 74] , - [100, 100, 153] , - [101, 115, 74] , - [116, 116, 154] , - [117, 122, 74] - ] , - [ - [48, 107, -31] , - [108, 108, 155] , - [109, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 156] , - [102, 122, 74] - ] , - [ - [48, 111, -92] , - [112, 112, 157] , - [113, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 158] , - [102, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 116, 74] , - [117, 117, 159] , - [118, 122, 74] - ] , - [ - [48, 111, -92] , - [112, 112, 160] , - [113, 122, 74] - ] , - [ - [48, 104, -93] , - [105, 105, 161] , - [106, 122, 74] - ] , - [ - [48, 113, -30] , - [114, 114, 162] , - [115, 122, 74] - ] , - [ - [48, 104, -93] , - [105, 105, 163] , - [106, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 164] , - [117, 122, 74] - ] , - [ - [48, 104, -93] , - [105, 105, 165] , - [106, 122, 74] - ] , - [ - [0, 255, -47] - ] , - nil_array , - [ - [0, 9, 166] , - [11, 12, 166] , - [14, 255, 166] - ] , - nil_array , - [ - [0, 255, -8] - ] , - nil_array , - nil_array , - nil_array , - [ - [48, 122, -72] - ] , - [ - [48, 122, -72] - ] , - [ - [48, 122, -72] - ] , - [ - [48, 122, -72] - ] , - [ - [48, 113, -30] , - [114, 114, 167] , - [115, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 168] , - [117, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 100, -37] , - [101, 101, 169] , - [102, 122, 74] - ] , - [ - [48, 113, -30] , - [114, 114, 170] , - [115, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 97, 171] , - [98, 122, 74] - ] , - [ - [48, 114, -79] , - [115, 115, 172] , - [116, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 173] , - [117, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 174] , - [102, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 100, -37] , - [101, 101, 175] , - [102, 122, 74] - ] , - [ - [48, 114, -79] , - [115, 115, 176] , - [116, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 110, -32] , - [111, 111, 177] , - [112, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 178] , - [117, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 179] , - [102, 113, 74] , - [114, 114, 180] , - [115, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 100, -37] , - [101, 101, 181] , - [102, 122, 74] - ] , - [ - [48, 103, -43] , - [104, 104, 182] , - [105, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 107, -31] , - [108, 108, 183] , - [109, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 184] , - [102, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 106, 74] , - [107, 107, 185] , - [108, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 117, 74] , - [118, 118, 186] , - [119, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 187] , - [117, 122, 74] - ] , - [ - [48, 99, -78] , - [100, 100, 188] , - [101, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 189] , - [102, 122, 74] - ] , - [ - [48, 116, -108] , - [117, 117, 190] , - [118, 122, 74] - ] , - [ - [48, 101, -36] , - [102, 102, 191] , - [103, 122, 74] - ] , - [ - [48, 98, -99] , - [99, 99, 192] , - [100, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 193] , - [102, 122, 74] - ] , - [ - [48, 109, -39] , - [110, 110, 194] , - [111, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 195] , - [102, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 196] , - [102, 122, 74] - ] , - [ - [48, 117, -152] , - [118, 118, 197] , - [119, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 107, -31] , - [108, 108, 198] , - [109, 122, 74] - ] , - [ - [48, 103, -43] , - [104, 104, 199] , - [105, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 200] , - [117, 122, 74] - ] , - [ - [0, 255, -47] - ] , - [ - [48, 115, -80] , - [116, 116, 201] , - [117, 122, 74] - ] , - [ - [48, 113, -30] , - [114, 114, 202] , - [115, 122, 74] - ] , - [ - [48, 113, -30] , - [114, 114, 203] , - [115, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 106, -151] , - [107, 107, 204] , - [108, 122, 74] - ] , - [ - [48, 114, -79] , - [115, 115, 205] , - [116, 122, 74] - ] , - [ - [48, 104, -93] , - [105, 105, 206] , - [106, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 113, -30] , - [114, 114, 207] , - [115, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 208] , - [102, 122, 74] - ] , - [ - [48, 113, -30] , - [114, 114, 209] , - [115, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 113, -30] , - [114, 114, 210] , - [115, 122, 74] - ] , - [ - [48, 116, -108] , - [117, 117, 211] , - [118, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 212] , - [117, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 95, -29] , - [97, 97, 213] , - [98, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 95, -29] , - [97, 97, 214] , - [98, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 97, 215] , - [98, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 216] , - [102, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 97, 217] , - [98, 122, 74] - ] , - [ - [48, 101, -36] , - [102, 102, 218] , - [103, 122, 74] - ] , - [ - [48, 113, -30] , - [114, 114, 219] , - [115, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 104, -93] , - [105, 105, 220] , - [106, 122, 74] - ] , - [ - [48, 113, -30] , - [114, 114, 221] , - [115, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 100, -37] , - [101, 101, 222] , - [102, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 223] , - [102, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 95, -29] , - [97, 97, 224] , - [98, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 95, -29] , - [97, 97, 225] , - [98, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 226] , - [117, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 109, -39] , - [110, 110, 227] , - [111, 122, 74] - ] , - [ - [48, 109, -39] , - [110, 110, 228] , - [111, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 115, -80] , - [116, 116, 229] , - [117, 122, 74] - ] , - [ - [48, 101, -36] , - [102, 102, 230] , - [103, 109, 74] , - [110, 110, 231] , - [111, 122, 74] - ] , - [ - [48, 99, -78] , - [100, 100, 232] , - [101, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 97, -29] , - [98, 98, 233] , - [99, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 102, 74] , - [103, 103, 234] , - [104, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 235] , - [117, 122, 74] - ] , - [ - [48, 98, -99] , - [99, 99, 236] , - [100, 122, 74] - ] , - [ - [48, 97, -29] , - [98, 98, 237] , - [99, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 109, -39] , - [110, 110, 238] , - [111, 122, 74] - ] , - [ - [48, 95, -29] , - [97, 97, 239] , - [98, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 113, -30] , - [114, 114, 240] , - [115, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 97, -29] , - [98, 98, 241] , - [99, 122, 74] - ] , - [ - [48, 98, -99] , - [99, 99, 242] , - [100, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 116, -108] , - [117, 117, 243] , - [118, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 95, -29] , - [97, 97, 244] , - [98, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 100, -37] , - [101, 101, 245] , - [102, 122, 74] - ] , - [ - [48, 107, -31] , - [108, 108, 246] , - [109, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 247] , - [102, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 248] , - [102, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 249] , - [117, 122, 74] - ] , - [ - [48, 107, -31] , - [108, 108, 250] , - [109, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 107, -31] , - [108, 108, 251] , - [109, 122, 74] - ] , - [ - [48, 114, -79] , - [115, 115, 252] , - [116, 122, 74] - ] , - [ - [48, 107, -31] , - [108, 108, 253] , - [109, 122, 74] - ] , - [ - [48, 115, -80] , - [116, 116, 254] , - [117, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 255] , - [102, 122, 74] - ] , - [ - [48, 98, -99] , - [99, 99, 256] , - [100, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 100, -37] , - [101, 101, 257] , - [102, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 100, -37] , - [101, 101, 258] , - [102, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 259] , - [102, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 95, -29] , - [97, 97, 260] , - [98, 122, 74] - ] , - [ - [48, 100, -37] , - [101, 101, 261] , - [102, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 100, -37] , - [101, 101, 262] , - [102, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 99, -78] , - [100, 100, 263] , - [101, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 107, -31] , - [108, 108, 264] , - [109, 122, 74] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] , - [ - [48, 122, -35] - ] - ] - ] - end - - private fun nil_array: Array[Array[Int]] - do - return once new Array[Array[Int]] - end - - var _accept_table: Array[Array[Int]] - private fun build_accept_table do - _accept_table = once [ - [ - -1 , 0 , 1 , 1 , 0 , -1 , -1 , -1 , 69 , -1 , 52 , 53 , 67 , 65 , 56 , 66 , 64 , 68 , 80 , 57 , 72 , 59 , 74 , 77 , 54 , 55 , -1 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , -1 , 1 , 71 , -1 , 83 , -1 , 84 , -1 , 2 , 2 , -1 , 82 , 60 , 61 , 63 , 81 , -1 , 58 , 73 , 70 , 75 , 77 , 77 , 77 , 77 , 79 , 78 , 78 , 78 , 78 , 78 , 78 , 48 , 78 , 78 , 78 , 78 , 17 , 78 , 78 , 78 , 78 , 78 , 78 , 26 , 78 , 31 , 16 , 78 , 78 , 78 , 78 , 78 , 33 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , -1 , 86 , -1 , 85 , -1 , 2 , 62 , 76 , 79 , 79 , 79 , 79 , 78 , 78 , 32 , 78 , 78 , 78 , 78 , 78 , 78 , 10 , 78 , 78 , 30 , 11 , 78 , 78 , 78 , 41 , 78 , 78 , 40 , 34 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 78 , 20 , 78 , 78 , 78 , -1 , 78 , 78 , 78 , 13 , 78 , 78 , 78 , 28 , 78 , 78 , 78 , 14 , 78 , 78 , 78 , 11 , 47 , 42 , 78 , 78 , 78 , 78 , 78 , 78 , 44 , 78 , 78 , 27 , 45 , 12 , 78 , 78 , 49 , 78 , 38 , 78 , 78 , 37 , 5 , 78 , 78 , 46 , 78 , 78 , 78 , 51 , 78 , 78 , 78 , 78 , 78 , 15 , 78 , 78 , 43 , 78 , 29 , 78 , 78 , 39 , 78 , 22 , 4 , 78 , 21 , 78 , 78 , 78 , 78 , 78 , 78 , 35 , 78 , 78 , 78 , 78 , 78 , 78 , 25 , 78 , 3 , 24 , 78 , 78 , 9 , 78 , 78 , 6 , 36 , 78 , 50 , 78 , 18 , 78 , 19 , 7 , 23 , 8 - - ] - ] - end end