# Lexer and its tokens. # This file was generated by SableCC (http://www.sablecc.org/). package lexer import parser_nodes redef class Token readable writable attr _text: String readable attr _filename: String readable attr _line: Int readable attr _pos: Int meth parser_index: Int is abstract redef meth to_s: String do return "'{_text}'" end end redef class TEol redef meth parser_index: Int do return 0 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TComment redef meth parser_index: Int do return 1 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TKwpackage redef meth parser_index: Int do return 2 end init(fname: String, line: Int, pos: Int) do _text = once "package" _filename = fname _line = line _pos = pos end end redef class TKwimport redef meth parser_index: Int do return 3 end init(fname: String, line: Int, pos: Int) do _text = once "import" _filename = fname _line = line _pos = pos end end redef class TKwclass redef meth parser_index: Int do return 4 end init(fname: String, line: Int, pos: Int) do _text = once "class" _filename = fname _line = line _pos = pos end end redef class TKwabstract redef meth parser_index: Int do return 5 end init(fname: String, line: Int, pos: Int) do _text = once "abstract" _filename = fname _line = line _pos = pos end end redef class TKwinterface redef meth parser_index: Int do return 6 end init(fname: String, line: Int, pos: Int) do _text = once "interface" _filename = fname _line = line _pos = pos end end redef class TKwuniversal redef meth parser_index: Int do return 7 end init(fname: String, line: Int, pos: Int) do _text = once "universal" _filename = fname _line = line _pos = pos end end redef class TKwspecial redef meth parser_index: Int do return 8 end init(fname: String, line: Int, pos: Int) do _text = once "special" _filename = fname _line = line _pos = pos end end redef class TKwend redef meth parser_index: Int do return 9 end init(fname: String, line: Int, pos: Int) do _text = once "end" _filename = fname _line = line _pos = pos end end redef class TKwmeth redef meth parser_index: Int do return 10 end init(fname: String, line: Int, pos: Int) do _text = once "meth" _filename = fname _line = line _pos = pos end end redef class TKwtype redef meth parser_index: Int do return 11 end init(fname: String, line: Int, pos: Int) do _text = once "type" _filename = fname _line = line _pos = pos end end redef class TKwattr redef meth parser_index: Int do return 12 end init(fname: String, line: Int, pos: Int) do _text = once "attr" _filename = fname _line = line _pos = pos end end redef class TKwinit redef meth parser_index: Int do return 13 end init(fname: String, line: Int, pos: Int) do _text = once "init" _filename = fname _line = line _pos = pos end end redef class TKwredef redef meth parser_index: Int do return 14 end init(fname: String, line: Int, pos: Int) do _text = once "redef" _filename = fname _line = line _pos = pos end end redef class TKwis redef meth parser_index: Int do return 15 end init(fname: String, line: Int, pos: Int) do _text = once "is" _filename = fname _line = line _pos = pos end end redef class TKwdo redef meth parser_index: Int do return 16 end init(fname: String, line: Int, pos: Int) do _text = once "do" _filename = fname _line = line _pos = pos end end redef class TKwreadable redef meth parser_index: Int do return 17 end init(fname: String, line: Int, pos: Int) do _text = once "readable" _filename = fname _line = line _pos = pos end end redef class TKwwritable redef meth parser_index: Int do return 18 end init(fname: String, line: Int, pos: Int) do _text = once "writable" _filename = fname _line = line _pos = pos end end redef class TKwvar redef meth parser_index: Int do return 19 end init(fname: String, line: Int, pos: Int) do _text = once "var" _filename = fname _line = line _pos = pos end end redef class TKwintern redef meth parser_index: Int do return 20 end init(fname: String, line: Int, pos: Int) do _text = once "intern" _filename = fname _line = line _pos = pos end end redef class TKwextern redef meth parser_index: Int do return 21 end init(fname: String, line: Int, pos: Int) do _text = once "extern" _filename = fname _line = line _pos = pos end end redef class TKwprotected redef meth parser_index: Int do return 22 end init(fname: String, line: Int, pos: Int) do _text = once "protected" _filename = fname _line = line _pos = pos end end redef class TKwprivate redef meth parser_index: Int do return 23 end init(fname: String, line: Int, pos: Int) do _text = once "private" _filename = fname _line = line _pos = pos end end redef class TKwintrude redef meth parser_index: Int do return 24 end init(fname: String, line: Int, pos: Int) do _text = once "intrude" _filename = fname _line = line _pos = pos end end redef class TKwif redef meth parser_index: Int do return 25 end init(fname: String, line: Int, pos: Int) do _text = once "if" _filename = fname _line = line _pos = pos end end redef class TKwthen redef meth parser_index: Int do return 26 end init(fname: String, line: Int, pos: Int) do _text = once "then" _filename = fname _line = line _pos = pos end end redef class TKwelse redef meth parser_index: Int do return 27 end init(fname: String, line: Int, pos: Int) do _text = once "else" _filename = fname _line = line _pos = pos end end redef class TKwwhile redef meth parser_index: Int do return 28 end init(fname: String, line: Int, pos: Int) do _text = once "while" _filename = fname _line = line _pos = pos end end redef class TKwfor redef meth parser_index: Int do return 29 end init(fname: String, line: Int, pos: Int) do _text = once "for" _filename = fname _line = line _pos = pos end end redef class TKwin redef meth parser_index: Int do return 30 end init(fname: String, line: Int, pos: Int) do _text = once "in" _filename = fname _line = line _pos = pos end end redef class TKwand redef meth parser_index: Int do return 31 end init(fname: String, line: Int, pos: Int) do _text = once "and" _filename = fname _line = line _pos = pos end end redef class TKwor redef meth parser_index: Int do return 32 end init(fname: String, line: Int, pos: Int) do _text = once "or" _filename = fname _line = line _pos = pos end end redef class TKwnot redef meth parser_index: Int do return 33 end init(fname: String, line: Int, pos: Int) do _text = once "not" _filename = fname _line = line _pos = pos end end redef class TKwreturn redef meth parser_index: Int do return 34 end init(fname: String, line: Int, pos: Int) do _text = once "return" _filename = fname _line = line _pos = pos end end redef class TKwcontinue redef meth parser_index: Int do return 35 end init(fname: String, line: Int, pos: Int) do _text = once "continue" _filename = fname _line = line _pos = pos end end redef class TKwbreak redef meth parser_index: Int do return 36 end init(fname: String, line: Int, pos: Int) do _text = once "break" _filename = fname _line = line _pos = pos end end redef class TKwabort redef meth parser_index: Int do return 37 end init(fname: String, line: Int, pos: Int) do _text = once "abort" _filename = fname _line = line _pos = pos end end redef class TKwassert redef meth parser_index: Int do return 38 end init(fname: String, line: Int, pos: Int) do _text = once "assert" _filename = fname _line = line _pos = pos end end redef class TKwnew redef meth parser_index: Int do return 39 end init(fname: String, line: Int, pos: Int) do _text = once "new" _filename = fname _line = line _pos = pos end end redef class TKwisa redef meth parser_index: Int do return 40 end init(fname: String, line: Int, pos: Int) do _text = once "isa" _filename = fname _line = line _pos = pos end end redef class TKwonce redef meth parser_index: Int do return 41 end init(fname: String, line: Int, pos: Int) do _text = once "once" _filename = fname _line = line _pos = pos end end redef class TKwsuper redef meth parser_index: Int do return 42 end init(fname: String, line: Int, pos: Int) do _text = once "super" _filename = fname _line = line _pos = pos end end redef class TKwself redef meth parser_index: Int do return 43 end init(fname: String, line: Int, pos: Int) do _text = once "self" _filename = fname _line = line _pos = pos end end redef class TKwtrue redef meth parser_index: Int do return 44 end init(fname: String, line: Int, pos: Int) do _text = once "true" _filename = fname _line = line _pos = pos end end redef class TKwfalse redef meth parser_index: Int do return 45 end init(fname: String, line: Int, pos: Int) do _text = once "false" _filename = fname _line = line _pos = pos end end redef class TKwnull redef meth parser_index: Int do return 46 end init(fname: String, line: Int, pos: Int) do _text = once "null" _filename = fname _line = line _pos = pos end end redef class TOpar redef meth parser_index: Int do return 47 end init(fname: String, line: Int, pos: Int) do _text = once "(" _filename = fname _line = line _pos = pos end end redef class TCpar redef meth parser_index: Int do return 48 end init(fname: String, line: Int, pos: Int) do _text = once ")" _filename = fname _line = line _pos = pos end end redef class TObra redef meth parser_index: Int do return 49 end init(fname: String, line: Int, pos: Int) do _text = once "[" _filename = fname _line = line _pos = pos end end redef class TCbra redef meth parser_index: Int do return 50 end init(fname: String, line: Int, pos: Int) do _text = once "]" _filename = fname _line = line _pos = pos end end redef class TComma redef meth parser_index: Int do return 51 end init(fname: String, line: Int, pos: Int) do _text = once "," _filename = fname _line = line _pos = pos end end redef class TColumn redef meth parser_index: Int do return 52 end init(fname: String, line: Int, pos: Int) do _text = once ":" _filename = fname _line = line _pos = pos end end redef class TQuad redef meth parser_index: Int do return 53 end init(fname: String, line: Int, pos: Int) do _text = once "::" _filename = fname _line = line _pos = pos end end redef class TAssign redef meth parser_index: Int do return 54 end init(fname: String, line: Int, pos: Int) do _text = once "=" _filename = fname _line = line _pos = pos end end redef class TPluseq redef meth parser_index: Int do return 55 end init(fname: String, line: Int, pos: Int) do _text = once "+=" _filename = fname _line = line _pos = pos end end redef class TMinuseq redef meth parser_index: Int do return 56 end init(fname: String, line: Int, pos: Int) do _text = once "-=" _filename = fname _line = line _pos = pos end end redef class TDotdotdot redef meth parser_index: Int do return 57 end init(fname: String, line: Int, pos: Int) do _text = once "..." _filename = fname _line = line _pos = pos end end redef class TDotdot redef meth parser_index: Int do return 58 end init(fname: String, line: Int, pos: Int) do _text = once ".." _filename = fname _line = line _pos = pos end end redef class TDot redef meth parser_index: Int do return 59 end init(fname: String, line: Int, pos: Int) do _text = once "." _filename = fname _line = line _pos = pos end end redef class TPlus redef meth parser_index: Int do return 60 end init(fname: String, line: Int, pos: Int) do _text = once "+" _filename = fname _line = line _pos = pos end end redef class TMinus redef meth parser_index: Int do return 61 end init(fname: String, line: Int, pos: Int) do _text = once "-" _filename = fname _line = line _pos = pos end end redef class TStar redef meth parser_index: Int do return 62 end init(fname: String, line: Int, pos: Int) do _text = once "*" _filename = fname _line = line _pos = pos end end redef class TSlash redef meth parser_index: Int do return 63 end init(fname: String, line: Int, pos: Int) do _text = once "/" _filename = fname _line = line _pos = pos end end redef class TPercent redef meth parser_index: Int do return 64 end init(fname: String, line: Int, pos: Int) do _text = once "%" _filename = fname _line = line _pos = pos end end redef class TEq redef meth parser_index: Int do return 65 end init(fname: String, line: Int, pos: Int) do _text = once "==" _filename = fname _line = line _pos = pos end end redef class TNe redef meth parser_index: Int do return 66 end init(fname: String, line: Int, pos: Int) do _text = once "!=" _filename = fname _line = line _pos = pos end end redef class TLt redef meth parser_index: Int do return 67 end init(fname: String, line: Int, pos: Int) do _text = once "<" _filename = fname _line = line _pos = pos end end redef class TLe redef meth parser_index: Int do return 68 end init(fname: String, line: Int, pos: Int) do _text = once "<=" _filename = fname _line = line _pos = pos end end redef class TGt redef meth parser_index: Int do return 69 end init(fname: String, line: Int, pos: Int) do _text = once ">" _filename = fname _line = line _pos = pos end end redef class TGe redef meth parser_index: Int do return 70 end init(fname: String, line: Int, pos: Int) do _text = once ">=" _filename = fname _line = line _pos = pos end end redef class TStarship redef meth parser_index: Int do return 71 end init(fname: String, line: Int, pos: Int) do _text = once "<=>" _filename = fname _line = line _pos = pos end end redef class TClassid redef meth parser_index: Int do return 72 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TId redef meth parser_index: Int do return 73 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TAttrid redef meth parser_index: Int do return 74 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TNumber redef meth parser_index: Int do return 75 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TFloat redef meth parser_index: Int do return 76 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TChar redef meth parser_index: Int do return 77 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TString redef meth parser_index: Int do return 78 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TStartString redef meth parser_index: Int do return 79 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TMidString redef meth parser_index: Int do return 80 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class TEndString redef meth parser_index: Int do return 81 end init(text: String, fname: String, line: Int, pos: Int) do _text = text _filename = fname _line = line _pos = pos end end redef class EOF redef meth parser_index: Int do return 82 end init(fname: String, line: Int, pos: Int) do _filename = fname _text = "" _line = line _pos = pos end end redef class PError readable writable attr _message: String init init_error(fname: String, line: Int, pos: Int, message: String) do init(fname, line, pos) _message = message end end # The lexer extract NIT tokens from an input stream. # It is better user with the Parser class Lexer # Last peeked token attr _token: Token # Lexer current state attr _state: Int # Name of the stream (as given to tokens) readable attr _filename: String # Input stream where character are read attr _stream: IStream # Pushback buffer to store unread character attr _stream_buf: String # Number of character stored in the pushback buffer attr _stream_pos: Int # Current line number in the input stream attr _line: Int # Current column in the input stream attr _pos: Int # Was the last character a cariage-return? attr _cr: Bool # If the end of stream? attr _eof: Bool # Current working text read from the input stream attr _text: String # Constante state values private meth state_initial: Int do return 0 end # Create a new lexer for a stream (and a name) init(stream: IStream, fname: String) do _filename = fname _text = new String _stream = stream _stream_pos = -1 _stream_buf = new String build_goto_table build_accept_table end # Give the next token (but do not consume it) meth peek: Token do while _token == null do _token = get_token end return _token end # Give and consume the next token meth next: Token do var result = _token while result == null do result = get_token end _token = null return result end # Get a token, or null if it is discarded private meth get_token: Token do var dfa_state = 0 var start_pos = _pos var start_line = _line var accept_state = -1 var accept_token = -1 var accept_length = -1 var accept_pos = -1 var accept_line = -1 var goto_table = _goto_table[_state] var accept = _accept_table[_state] _text.clear while true do var c = get_char if c != -1 then if c == 10 then if _cr then _cr = false else _line = _line + 1 _pos = 0 end else if c == 13 then _line = _line + 1 _pos = 0 _cr = true else _pos = _pos + 1 _cr = false end _text.add(c.ascii) var first_loop = true # aka until while dfa_state < -1 or first_loop do var old_state = dfa_state if dfa_state < -1 then old_state = -2 - dfa_state end 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 end end first_loop = false # aka until end else dfa_state = -1 end if dfa_state >= 0 then if accept[dfa_state] != -1 then accept_state = dfa_state accept_token = accept[dfa_state] accept_length = _text.length accept_pos = _pos accept_line = _line end else if accept_state != -1 then 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(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 2 then var token_text = _text.substring(0, accept_length) var token = new TComment(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 3 then var token = new TKwpackage(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 4 then var token = new TKwimport(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 5 then var token = new TKwclass(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 6 then var token = new TKwabstract(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 7 then var token = new TKwinterface(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 8 then var token = new TKwuniversal(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 9 then var token = new TKwspecial(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 10 then var token = new TKwend(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 11 then var token = new TKwmeth(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 12 then var token = new TKwtype(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 13 then var token = new TKwattr(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 14 then var token = new TKwinit(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 15 then var token = new TKwredef(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 16 then var token = new TKwis(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 17 then var token = new TKwdo(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 18 then var token = new TKwreadable(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 19 then var token = new TKwwritable(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 20 then var token = new TKwvar(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 21 then var token = new TKwintern(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 22 then var token = new TKwextern(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 23 then var token = new TKwprotected(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 24 then var token = new TKwprivate(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 25 then var token = new TKwintrude(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 26 then var token = new TKwif(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 27 then var token = new TKwthen(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 28 then var token = new TKwelse(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 29 then var token = new TKwwhile(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 30 then var token = new TKwfor(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 31 then var token = new TKwin(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 32 then var token = new TKwand(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 33 then var token = new TKwor(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 34 then var token = new TKwnot(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 35 then var token = new TKwreturn(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 36 then var token = new TKwcontinue(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 37 then var token = new TKwbreak(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 38 then var token = new TKwabort(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 39 then var token = new TKwassert(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 40 then var token = new TKwnew(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 41 then var token = new TKwisa(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 42 then var token = new TKwonce(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 43 then var token = new TKwsuper(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 44 then var token = new TKwself(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 45 then var token = new TKwtrue(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 46 then var token = new TKwfalse(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 47 then var token = new TKwnull(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 48 then var token = new TOpar(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 49 then var token = new TCpar(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 50 then var token = new TObra(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 51 then var token = new TCbra(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 52 then var token = new TComma(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 53 then var token = new TColumn(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 54 then var token = new TQuad(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 55 then var token = new TAssign(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 56 then var token = new TPluseq(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 57 then var token = new TMinuseq(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 58 then var token = new TDotdotdot(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 59 then var token = new TDotdot(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 60 then var token = new TDot(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 61 then var token = new TPlus(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 62 then var token = new TMinus(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 63 then var token = new TStar(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 64 then var token = new TSlash(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 65 then var token = new TPercent(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 66 then var token = new TEq(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 67 then var token = new TNe(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 68 then var token = new TLt(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 69 then var token = new TLe(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 70 then var token = new TGt(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 71 then var token = new TGe(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 72 then var token = new TStarship(_filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 73 then var token_text = _text.substring(0, accept_length) var token = new TClassid(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 74 then var token_text = _text.substring(0, accept_length) var token = new TId(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 75 then var token_text = _text.substring(0, accept_length) var token = new TAttrid(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 76 then var token_text = _text.substring(0, accept_length) var token = new TNumber(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 77 then var token_text = _text.substring(0, accept_length) var token = new TFloat(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 78 then var token_text = _text.substring(0, accept_length) var token = new TChar(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 79 then var token_text = _text.substring(0, accept_length) var token = new TString(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 80 then var token_text = _text.substring(0, accept_length) var token = new TStartString(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 81 then var token_text = _text.substring(0, accept_length) var token = new TMidString(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end if accept_token == 82 then var token_text = _text.substring(0, accept_length) var token = new TEndString(token_text, _filename, start_line + 1, start_pos + 1) push_back(accept_length) _pos = accept_pos _line = accept_line return token end else if _text.length > 0 then var token = new PError.init_error(_filename, start_line + 1, start_pos + 1, "Unknown token: {_text}") return token else var token = new EOF(_filename, start_line + 1, start_pos + 1) return token end end end end return null end # Read the next character. # The character is read from the stream of from the pushback buffer. private meth get_char: Int do if _eof then return -1 end var result: Int var sp = _stream_pos if sp >= 0 then var res = _stream_buf[_stream_pos] _stream_pos = sp - 1 result = res.ascii else result = _stream.read_char end if result == -1 then _eof = true end return result end # Unread some characters. # Unread characters are stored in the pushback buffer. private meth push_back(accept_length: Int) do var length = _text.length var i = length - 1 while i >= accept_length do _eof = false _stream_pos = _stream_pos + 1 _stream_buf[_stream_pos] = _text[i] i = i - 1 end end attr _goto_table: Array[Array[Array[Array[Int]]]] private meth 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, 122, 74] ] , [ [48, 95, -29] , [97, 122, 74] ] , [ [48, 95, -29] , [97, 101, 74] , [102, 102, 88] , [103, 108, 74] , [109, 109, 89] , [110, 110, 90] , [111, 114, 74] , [115, 115, 91] , [116, 122, 74] ] , [ [48, 95, -29] , [97, 100, 74] , [101, 101, 92] , [102, 122, 74] ] , [ [48, 100, -37] , [101, 101, 93] , [102, 110, 74] , [111, 111, 94] , [112, 116, 74] , [117, 117, 95] , [118, 122, 74] ] , [ [48, 95, -29] , [97, 109, 74] , [110, 110, 96] , [111, 113, 74] , [114, 114, 97] , [115, 122, 74] ] , [ [48, 95, -29] , [97, 97, 98] , [98, 113, 74] , [114, 114, 99] , [115, 122, 74] ] , [ [48, 100, -37] , [101, 101, 100] , [102, 122, 74] ] , [ [48, 100, -37] , [101, 101, 101] , [102, 111, 74] , [112, 112, 102] , [113, 116, 74] , [117, 117, 103] , [118, 122, 74] ] , [ [48, 95, -29] , [97, 103, 74] , [104, 104, 104] , [105, 113, 74] , [114, 114, 105] , [115, 120, 74] , [121, 121, 106] , [122, 122, 74] ] , [ [48, 109, -39] , [110, 110, 107] , [111, 122, 74] ] , [ [48, 95, -29] , [97, 97, 108] , [98, 122, 74] ] , [ [48, 103, -43] , [104, 104, 109] , [105, 113, 74] , [114, 114, 110] , [115, 122, 74] ] , [ [0, 9, 111] , [11, 12, 111] , [14, 33, 111] , [34, 34, 112] , [35, 91, 111] , [92, 92, 113] , [93, 122, 111] , [123, 123, 114] , [124, 255, 111] ] , nil_array , nil_array , [ [0, 255, -8] ] , nil_array , [ [0, 9, 115] , [11, 12, 115] , [14, 255, 115] ] , nil_array , [ [0, 255, -9] ] , nil_array , [ [10, 10, 116] ] , [ [0, 255, -11] ] , nil_array , nil_array , nil_array , [ [46, 46, 117] ] , [ [48, 57, 60] ] , [ [48, 57, 60] ] , nil_array , [ [62, 62, 118] ] , nil_array , nil_array , [ [48, 122, -25] ] , [ [48, 122, -25] ] , [ [48, 122, -25] ] , [ [48, 122, -25] ] , [ [48, 57, 119] , [65, 90, 120] , [95, 95, 121] , [97, 122, 122] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 110, -32] , [111, 111, 123] , [112, 114, 74] , [115, 115, 124] , [116, 122, 74] ] , [ [48, 95, -29] , [97, 99, 74] , [100, 100, 125] , [101, 122, 74] ] , [ [48, 95, -29] , [97, 114, 74] , [115, 115, 126] , [116, 122, 74] ] , [ [48, 95, -29] , [97, 115, 74] , [116, 116, 127] , [117, 122, 74] ] , [ [48, 100, -37] , [101, 101, 128] , [102, 122, 74] ] , [ [48, 95, -29] , [97, 97, 129] , [98, 122, 74] ] , [ [48, 109, -39] , [110, 110, 130] , [111, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 114, -79] , [115, 115, 131] , [116, 122, 74] ] , [ [48, 99, -78] , [100, 100, 132] , [101, 122, 74] ] , [ [48, 115, -80] , [116, 116, 133] , [117, 122, 74] ] , [ [48, 107, -31] , [108, 108, 134] , [109, 122, 74] ] , [ [48, 113, -30] , [114, 114, 135] , [115, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 95, -29] , [97, 111, 74] , [112, 112, 136] , [113, 122, 74] ] , [ [48, 95, -29] , [97, 104, 74] , [105, 105, 137] , [106, 115, 74] , [116, 116, 138] , [117, 122, 74] ] , [ [48, 95, -29] , [97, 97, 139] , [98, 122, 74] ] , [ [48, 115, -80] , [116, 116, 140] , [117, 122, 74] ] , [ [48, 95, -29] , [97, 118, 74] , [119, 119, 141] , [120, 122, 74] ] , [ [48, 115, -80] , [116, 116, 142] , [117, 122, 74] ] , [ [48, 107, -31] , [108, 108, 143] , [109, 122, 74] ] , [ [48, 95, -29] , [97, 98, 74] , [99, 99, 144] , [100, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 98, -98] , [99, 99, 145] , [100, 122, 74] ] , [ [48, 104, -92] , [105, 105, 146] , [106, 110, 74] , [111, 111, 147] , [112, 122, 74] ] , [ [48, 95, -29] , [97, 97, 148] , [98, 99, 74] , [100, 100, 149] , [101, 115, 74] , [116, 116, 150] , [117, 122, 74] ] , [ [48, 107, -31] , [108, 108, 151] , [109, 122, 74] ] , [ [48, 100, -37] , [101, 101, 152] , [102, 122, 74] ] , [ [48, 111, -91] , [112, 112, 153] , [113, 122, 74] ] , [ [48, 100, -37] , [101, 101, 154] , [102, 122, 74] ] , [ [48, 95, -29] , [97, 116, 74] , [117, 117, 155] , [118, 122, 74] ] , [ [48, 111, -91] , [112, 112, 156] , [113, 122, 74] ] , [ [48, 104, -92] , [105, 105, 157] , [106, 122, 74] ] , [ [48, 113, -30] , [114, 114, 158] , [115, 122, 74] ] , [ [48, 104, -92] , [105, 105, 159] , [106, 122, 74] ] , [ [48, 104, -92] , [105, 105, 160] , [106, 122, 74] ] , [ [0, 255, -47] ] , nil_array , [ [0, 9, 161] , [11, 12, 161] , [14, 255, 161] ] , 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, 162] , [115, 122, 74] ] , [ [48, 115, -80] , [116, 116, 163] , [117, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 100, -37] , [101, 101, 164] , [102, 122, 74] ] , [ [48, 113, -30] , [114, 114, 165] , [115, 122, 74] ] , [ [48, 95, -29] , [97, 97, 166] , [98, 122, 74] ] , [ [48, 114, -79] , [115, 115, 167] , [116, 122, 74] ] , [ [48, 115, -80] , [116, 116, 168] , [117, 122, 74] ] , [ [48, 100, -37] , [101, 101, 169] , [102, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 100, -37] , [101, 101, 170] , [102, 122, 74] ] , [ [48, 114, -79] , [115, 115, 171] , [116, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 110, -32] , [111, 111, 172] , [112, 122, 74] ] , [ [48, 115, -80] , [116, 116, 173] , [117, 122, 74] ] , [ [48, 100, -37] , [101, 101, 174] , [102, 113, 74] , [114, 114, 175] , [115, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 103, -43] , [104, 104, 176] , [105, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 107, -31] , [108, 108, 177] , [109, 122, 74] ] , [ [48, 100, -37] , [101, 101, 178] , [102, 122, 74] ] , [ [48, 95, -29] , [97, 106, 74] , [107, 107, 179] , [108, 122, 74] ] , [ [48, 95, -29] , [97, 117, 74] , [118, 118, 180] , [119, 122, 74] ] , [ [48, 115, -80] , [116, 116, 181] , [117, 122, 74] ] , [ [48, 99, -78] , [100, 100, 182] , [101, 122, 74] ] , [ [48, 100, -37] , [101, 101, 183] , [102, 122, 74] ] , [ [48, 116, -107] , [117, 117, 184] , [118, 122, 74] ] , [ [48, 101, -36] , [102, 102, 185] , [103, 122, 74] ] , [ [48, 98, -98] , [99, 99, 186] , [100, 122, 74] ] , [ [48, 100, -37] , [101, 101, 187] , [102, 122, 74] ] , [ [48, 109, -39] , [110, 110, 188] , [111, 122, 74] ] , [ [48, 100, -37] , [101, 101, 189] , [102, 122, 74] ] , [ [48, 100, -37] , [101, 101, 190] , [102, 122, 74] ] , [ [48, 117, -148] , [118, 118, 191] , [119, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 107, -31] , [108, 108, 192] , [109, 122, 74] ] , [ [48, 115, -80] , [116, 116, 193] , [117, 122, 74] ] , [ [0, 255, -47] ] , [ [48, 115, -80] , [116, 116, 194] , [117, 122, 74] ] , [ [48, 113, -30] , [114, 114, 195] , [115, 122, 74] ] , [ [48, 113, -30] , [114, 114, 196] , [115, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 106, -147] , [107, 107, 197] , [108, 122, 74] ] , [ [48, 114, -79] , [115, 115, 198] , [116, 122, 74] ] , [ [48, 104, -92] , [105, 105, 199] , [106, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 113, -30] , [114, 114, 200] , [115, 122, 74] ] , [ [48, 100, -37] , [101, 101, 201] , [102, 122, 74] ] , [ [48, 113, -30] , [114, 114, 202] , [115, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 113, -30] , [114, 114, 203] , [115, 122, 74] ] , [ [48, 116, -107] , [117, 117, 204] , [118, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 95, -29] , [97, 97, 205] , [98, 122, 74] ] , [ [48, 95, -29] , [97, 97, 206] , [98, 122, 74] ] , [ [48, 100, -37] , [101, 101, 207] , [102, 122, 74] ] , [ [48, 95, -29] , [97, 97, 208] , [98, 122, 74] ] , [ [48, 101, -36] , [102, 102, 209] , [103, 122, 74] ] , [ [48, 113, -30] , [114, 114, 210] , [115, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 104, -92] , [105, 105, 211] , [106, 122, 74] ] , [ [48, 113, -30] , [114, 114, 212] , [115, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 100, -37] , [101, 101, 213] , [102, 122, 74] ] , [ [48, 100, -37] , [101, 101, 214] , [102, 122, 74] ] , [ [48, 95, -29] , [97, 97, 215] , [98, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 95, -29] , [97, 97, 216] , [98, 122, 74] ] , [ [48, 115, -80] , [116, 116, 217] , [117, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 109, -39] , [110, 110, 218] , [111, 122, 74] ] , [ [48, 109, -39] , [110, 110, 219] , [111, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 115, -80] , [116, 116, 220] , [117, 122, 74] ] , [ [48, 101, -36] , [102, 102, 221] , [103, 109, 74] , [110, 110, 222] , [111, 122, 74] ] , [ [48, 99, -78] , [100, 100, 223] , [101, 122, 74] ] , [ [48, 95, -29] , [97, 102, 74] , [103, 103, 224] , [104, 122, 74] ] , [ [48, 115, -80] , [116, 116, 225] , [117, 122, 74] ] , [ [48, 98, -98] , [99, 99, 226] , [100, 122, 74] ] , [ [48, 97, -29] , [98, 98, 227] , [99, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 109, -39] , [110, 110, 228] , [111, 122, 74] ] , [ [48, 95, -29] , [97, 97, 229] , [98, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 113, -30] , [114, 114, 230] , [115, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 97, -29] , [98, 98, 231] , [99, 122, 74] ] , [ [48, 98, -98] , [99, 99, 232] , [100, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 116, -107] , [117, 117, 233] , [118, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 95, -29] , [97, 97, 234] , [98, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 100, -37] , [101, 101, 235] , [102, 122, 74] ] , [ [48, 100, -37] , [101, 101, 236] , [102, 122, 74] ] , [ [48, 100, -37] , [101, 101, 237] , [102, 122, 74] ] , [ [48, 115, -80] , [116, 116, 238] , [117, 122, 74] ] , [ [48, 107, -31] , [108, 108, 239] , [109, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 107, -31] , [108, 108, 240] , [109, 122, 74] ] , [ [48, 114, -79] , [115, 115, 241] , [116, 122, 74] ] , [ [48, 107, -31] , [108, 108, 242] , [109, 122, 74] ] , [ [48, 115, -80] , [116, 116, 243] , [117, 122, 74] ] , [ [48, 100, -37] , [101, 101, 244] , [102, 122, 74] ] , [ [48, 98, -98] , [99, 99, 245] , [100, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 100, -37] , [101, 101, 246] , [102, 122, 74] ] , [ [48, 100, -37] , [101, 101, 247] , [102, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 95, -29] , [97, 97, 248] , [98, 122, 74] ] , [ [48, 100, -37] , [101, 101, 249] , [102, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 100, -37] , [101, 101, 250] , [102, 122, 74] ] , [ [48, 99, -78] , [100, 100, 251] , [101, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 107, -31] , [108, 108, 252] , [109, 122, 74] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] , [ [48, 122, -35] ] ] ] end private meth nil_array: Array[Array[Int]] do return once new Array[Array[Int]] end attr _accept_table: Array[Array[Int]] private meth build_accept_table do _accept_table = once [ [ -1 , 0 , 1 , 1 , 0 , -1 , -1 , -1 , 65 , -1 , 48 , 49 , 63 , 61 , 52 , 62 , 60 , 64 , 76 , 53 , 68 , 55 , 70 , 73 , 50 , 51 , -1 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , -1 , 1 , 67 , -1 , 79 , -1 , 80 , -1 , 2 , 2 , -1 , 78 , 56 , 57 , 59 , 77 , -1 , 54 , 69 , 66 , 71 , 73 , 73 , 73 , 73 , 75 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 17 , 74 , 74 , 74 , 74 , 74 , 26 , 74 , 31 , 16 , 74 , 74 , 74 , 74 , 74 , 33 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , -1 , 82 , -1 , 81 , -1 , 2 , 58 , 72 , 75 , 75 , 75 , 75 , 74 , 74 , 32 , 74 , 74 , 74 , 74 , 74 , 74 , 10 , 74 , 74 , 30 , 74 , 74 , 74 , 41 , 74 , 40 , 34 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 20 , 74 , 74 , -1 , 74 , 74 , 74 , 13 , 74 , 74 , 74 , 28 , 74 , 74 , 74 , 14 , 74 , 74 , 11 , 47 , 42 , 74 , 74 , 74 , 74 , 74 , 74 , 44 , 74 , 74 , 27 , 45 , 12 , 74 , 74 , 74 , 38 , 74 , 74 , 37 , 5 , 74 , 74 , 46 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 15 , 74 , 74 , 43 , 74 , 29 , 74 , 74 , 39 , 74 , 22 , 4 , 74 , 21 , 74 , 74 , 74 , 74 , 74 , 35 , 74 , 74 , 74 , 74 , 74 , 74 , 25 , 3 , 24 , 74 , 74 , 9 , 74 , 74 , 6 , 36 , 74 , 74 , 18 , 74 , 19 , 7 , 23 , 8 ] ] end end