private import tables
redef class Token
- readable var _text: String
+ var _text: nullable String
- fun parser_index: Int is abstract
+ redef fun text
+ do
+ var res = _text
+ if res != null then return res
+ res = location.text
+ _text = res
+ return res
+ end
- redef fun to_s: String do
- return "'{_text}'"
+ redef fun text=(text)
+ do
+ _text = text
end
+
+ fun parser_index: Int is abstract
end
redef class TEol
return 0
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
return 1
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
return 2
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "import"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "class"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "abstract"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "interface"
_location = loc
end
end
return 7
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
-redef class TKwspecial
+redef class TKwend
redef fun parser_index: Int
do
return 8
init init_tk(loc: Location)
do
- _text = once "special"
_location = loc
end
end
-redef class TKwend
+redef class TKwmeth
redef fun parser_index: Int
do
return 9
init init_tk(loc: Location)
do
- _text = once "end"
_location = loc
end
end
-redef class TKwmeth
+redef class TKwtype
redef fun parser_index: Int
do
return 10
init init_tk(loc: Location)
do
- _text = once "fun"
_location = loc
end
end
-redef class TKwtype
+redef class TKwinit
redef fun parser_index: Int
do
return 11
init init_tk(loc: Location)
do
- _text = once "type"
_location = loc
end
end
-redef class TKwinit
+redef class TKwredef
redef fun parser_index: Int
do
return 12
init init_tk(loc: Location)
do
- _text = once "init"
_location = loc
end
end
-redef class TKwredef
+redef class TKwis
redef fun parser_index: Int
do
return 13
init init_tk(loc: Location)
do
- _text = once "redef"
_location = loc
end
end
-redef class TKwis
+redef class TKwdo
redef fun parser_index: Int
do
return 14
init init_tk(loc: Location)
do
- _text = once "is"
_location = loc
end
end
-redef class TKwdo
+redef class TKwreadable
redef fun parser_index: Int
do
return 15
init init_tk(loc: Location)
do
- _text = once "do"
_location = loc
end
end
-redef class TKwreadable
+redef class TKwwritable
redef fun parser_index: Int
do
return 16
init init_tk(loc: Location)
do
- _text = once "readable"
_location = loc
end
end
-redef class TKwwritable
+redef class TKwvar
redef fun parser_index: Int
do
return 17
init init_tk(loc: Location)
do
- _text = once "writable"
_location = loc
end
end
-redef class TKwvar
+redef class TKwintern
redef fun parser_index: Int
do
return 18
init init_tk(loc: Location)
do
- _text = once "var"
_location = loc
end
end
-redef class TKwintern
+redef class TKwextern
redef fun parser_index: Int
do
return 19
init init_tk(loc: Location)
do
- _text = once "intern"
_location = loc
end
end
-redef class TKwextern
+redef class TKwprotected
redef fun parser_index: Int
do
return 20
init init_tk(loc: Location)
do
- _text = once "extern"
_location = loc
end
end
-redef class TKwprotected
+redef class TKwprivate
redef fun parser_index: Int
do
return 21
init init_tk(loc: Location)
do
- _text = once "protected"
_location = loc
end
end
-redef class TKwprivate
+redef class TKwintrude
redef fun parser_index: Int
do
return 22
init init_tk(loc: Location)
do
- _text = once "private"
_location = loc
end
end
-redef class TKwintrude
+redef class TKwif
redef fun parser_index: Int
do
return 23
init init_tk(loc: Location)
do
- _text = once "intrude"
_location = loc
end
end
-redef class TKwif
+redef class TKwthen
redef fun parser_index: Int
do
return 24
init init_tk(loc: Location)
do
- _text = once "if"
_location = loc
end
end
-redef class TKwthen
+redef class TKwelse
redef fun parser_index: Int
do
return 25
init init_tk(loc: Location)
do
- _text = once "then"
_location = loc
end
end
-redef class TKwelse
+redef class TKwwhile
redef fun parser_index: Int
do
return 26
init init_tk(loc: Location)
do
- _text = once "else"
_location = loc
end
end
-redef class TKwwhile
+redef class TKwloop
redef fun parser_index: Int
do
return 27
init init_tk(loc: Location)
do
- _text = once "while"
_location = loc
end
end
-redef class TKwloop
+redef class TKwfor
redef fun parser_index: Int
do
return 28
init init_tk(loc: Location)
do
- _text = once "loop"
_location = loc
end
end
-redef class TKwfor
+redef class TKwin
redef fun parser_index: Int
do
return 29
init init_tk(loc: Location)
do
- _text = once "for"
_location = loc
end
end
-redef class TKwin
+redef class TKwand
redef fun parser_index: Int
do
return 30
init init_tk(loc: Location)
do
- _text = once "in"
_location = loc
end
end
-redef class TKwand
+redef class TKwor
redef fun parser_index: Int
do
return 31
init init_tk(loc: Location)
do
- _text = once "and"
_location = loc
end
end
-redef class TKwor
+redef class TKwnot
redef fun parser_index: Int
do
return 32
init init_tk(loc: Location)
do
- _text = once "or"
_location = loc
end
end
-redef class TKwnot
+redef class TKwreturn
redef fun parser_index: Int
do
return 33
init init_tk(loc: Location)
do
- _text = once "not"
_location = loc
end
end
-redef class TKwreturn
+redef class TKwcontinue
redef fun parser_index: Int
do
return 34
init init_tk(loc: Location)
do
- _text = once "return"
_location = loc
end
end
-redef class TKwcontinue
+redef class TKwbreak
redef fun parser_index: Int
do
return 35
init init_tk(loc: Location)
do
- _text = once "continue"
_location = loc
end
end
-redef class TKwbreak
+redef class TKwabort
redef fun parser_index: Int
do
return 36
init init_tk(loc: Location)
do
- _text = once "break"
_location = loc
end
end
-redef class TKwabort
+redef class TKwassert
redef fun parser_index: Int
do
return 37
init init_tk(loc: Location)
do
- _text = once "abort"
_location = loc
end
end
-redef class TKwassert
+redef class TKwnew
redef fun parser_index: Int
do
return 38
init init_tk(loc: Location)
do
- _text = once "assert"
_location = loc
end
end
-redef class TKwnew
+redef class TKwisa
redef fun parser_index: Int
do
return 39
init init_tk(loc: Location)
do
- _text = once "new"
_location = loc
end
end
-redef class TKwisa
+redef class TKwonce
redef fun parser_index: Int
do
return 40
init init_tk(loc: Location)
do
- _text = once "isa"
_location = loc
end
end
-redef class TKwonce
+redef class TKwsuper
redef fun parser_index: Int
do
return 41
init init_tk(loc: Location)
do
- _text = once "once"
_location = loc
end
end
-redef class TKwsuper
+redef class TKwself
redef fun parser_index: Int
do
return 42
init init_tk(loc: Location)
do
- _text = once "super"
_location = loc
end
end
-redef class TKwself
+redef class TKwtrue
redef fun parser_index: Int
do
return 43
init init_tk(loc: Location)
do
- _text = once "self"
_location = loc
end
end
-redef class TKwtrue
+redef class TKwfalse
redef fun parser_index: Int
do
return 44
init init_tk(loc: Location)
do
- _text = once "true"
_location = loc
end
end
-redef class TKwfalse
+redef class TKwnull
redef fun parser_index: Int
do
return 45
init init_tk(loc: Location)
do
- _text = once "false"
_location = loc
end
end
-redef class TKwnull
+redef class TKwas
redef fun parser_index: Int
do
return 46
init init_tk(loc: Location)
do
- _text = once "null"
_location = loc
end
end
-redef class TKwas
+redef class TKwnullable
redef fun parser_index: Int
do
return 47
init init_tk(loc: Location)
do
- _text = once "as"
_location = loc
end
end
-redef class TKwnullable
+redef class TKwisset
redef fun parser_index: Int
do
return 48
init init_tk(loc: Location)
do
- _text = once "nullable"
_location = loc
end
end
-redef class TKwisset
+redef class TKwlabel
redef fun parser_index: Int
do
return 49
init init_tk(loc: Location)
do
- _text = once "isset"
_location = loc
end
end
-redef class TKwlabel
+redef class TKwdebug
redef fun parser_index: Int
do
return 50
init init_tk(loc: Location)
do
- _text = once "label"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "("
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once ")"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "["
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "]"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once ","
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once ":"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "::"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "="
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "+="
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "-="
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "..."
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once ".."
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "."
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "+"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "-"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "*"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "/"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "%"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "=="
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "!="
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "<"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "<="
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "<<"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once ">"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once ">="
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once ">>"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "<=>"
_location = loc
end
end
init init_tk(loc: Location)
do
- _text = once "!"
_location = loc
end
end
-redef class TClassid
+redef class TAt
redef fun parser_index: Int
do
return 79
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
-redef class TId
+redef class TClassid
redef fun parser_index: Int
do
return 80
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
-redef class TAttrid
+redef class TId
redef fun parser_index: Int
do
return 81
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
-redef class TNumber
+redef class TAttrid
redef fun parser_index: Int
do
return 82
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
-redef class TFloat
+redef class TNumber
redef fun parser_index: Int
do
return 83
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
-redef class TChar
+redef class TFloat
redef fun parser_index: Int
do
return 84
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
return 85
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
return 86
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
return 87
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
return 88
end
- init init_tk(text: String, loc: Location)
+ init init_tk(loc: Location)
+ do
+ _location = loc
+ end
+end
+
+redef class TChar
+ redef fun parser_index: Int
+ do
+ return 89
+ end
+
+ init init_tk(loc: Location)
+ do
+ _location = loc
+ end
+end
+
+redef class TBadString
+ redef fun parser_index: Int
+ do
+ return 90
+ end
+
+ init init_tk(loc: Location)
+ do
+ _location = loc
+ end
+end
+
+redef class TBadChar
+ redef fun parser_index: Int
+ do
+ return 91
+ end
+
+ init init_tk(loc: Location)
+ do
+ _location = loc
+ end
+end
+
+redef class TExternCodeSegment
+ redef fun parser_index: Int
+ do
+ return 92
+ end
+
+ init init_tk(loc: Location)
do
- _text = text
_location = loc
end
end
redef class EOF
redef fun parser_index: Int
do
- return 89
+ return 93
end
- init(loc: Location)
+ init init_tk(loc: Location)
do
_text = ""
_location = loc
init init_error(message: String, loc: Location)
do
- init(loc)
+ init_tk(loc)
_message = message
end
end
+redef class ALexerError
+ readable var _string: String
+
+ init init_lexer_error(message: String, loc: Location, string: String)
+ do
+ init_error(message, loc)
+ _string = string
+ end
+end
+
+redef class AParserError
+ readable var _token: Token
+
+ init init_parser_error(message: String, loc: Location, token: Token)
+ do
+ init_error(message, loc)
+ _token = token
+ end
+end
# The lexer extract NIT tokens from an input stream.
# It is better user with the Parser
return null
end
if accept_token == 1 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TEol.init_tk(token_text, location)
+ return new TEol.init_tk(location)
end
if accept_token == 2 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TComment.init_tk(token_text, location)
+ return new TComment.init_tk(location)
end
if accept_token == 3 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TKwmodule.init_tk(token_text, location)
+ return new TKwmodule.init_tk(location)
end
if accept_token == 4 then
return new TKwimport.init_tk(location)
return new TKwinterface.init_tk(location)
end
if accept_token == 8 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TKwenum.init_tk(token_text, location)
+ return new TKwenum.init_tk(location)
end
if accept_token == 9 then
- return new TKwspecial.init_tk(location)
+ return new TKwend.init_tk(location)
end
if accept_token == 10 then
- return new TKwend.init_tk(location)
+ return new TKwmeth.init_tk(location)
end
if accept_token == 11 then
- return new TKwmeth.init_tk(location)
+ return new TKwtype.init_tk(location)
end
if accept_token == 12 then
- return new TKwtype.init_tk(location)
+ return new TKwinit.init_tk(location)
end
if accept_token == 13 then
- return new TKwinit.init_tk(location)
+ return new TKwredef.init_tk(location)
end
if accept_token == 14 then
- return new TKwredef.init_tk(location)
+ return new TKwis.init_tk(location)
end
if accept_token == 15 then
- return new TKwis.init_tk(location)
+ return new TKwdo.init_tk(location)
end
if accept_token == 16 then
- return new TKwdo.init_tk(location)
+ return new TKwreadable.init_tk(location)
end
if accept_token == 17 then
- return new TKwreadable.init_tk(location)
+ return new TKwwritable.init_tk(location)
end
if accept_token == 18 then
- return new TKwwritable.init_tk(location)
+ return new TKwvar.init_tk(location)
end
if accept_token == 19 then
- return new TKwvar.init_tk(location)
+ return new TKwintern.init_tk(location)
end
if accept_token == 20 then
- return new TKwintern.init_tk(location)
+ return new TKwextern.init_tk(location)
end
if accept_token == 21 then
- return new TKwextern.init_tk(location)
+ return new TKwprotected.init_tk(location)
end
if accept_token == 22 then
- return new TKwprotected.init_tk(location)
+ return new TKwprivate.init_tk(location)
end
if accept_token == 23 then
- return new TKwprivate.init_tk(location)
+ return new TKwintrude.init_tk(location)
end
if accept_token == 24 then
- return new TKwintrude.init_tk(location)
+ return new TKwif.init_tk(location)
end
if accept_token == 25 then
- return new TKwif.init_tk(location)
+ return new TKwthen.init_tk(location)
end
if accept_token == 26 then
- return new TKwthen.init_tk(location)
+ return new TKwelse.init_tk(location)
end
if accept_token == 27 then
- return new TKwelse.init_tk(location)
+ return new TKwwhile.init_tk(location)
end
if accept_token == 28 then
- return new TKwwhile.init_tk(location)
+ return new TKwloop.init_tk(location)
end
if accept_token == 29 then
- return new TKwloop.init_tk(location)
+ return new TKwfor.init_tk(location)
end
if accept_token == 30 then
- return new TKwfor.init_tk(location)
+ return new TKwin.init_tk(location)
end
if accept_token == 31 then
- return new TKwin.init_tk(location)
+ return new TKwand.init_tk(location)
end
if accept_token == 32 then
- return new TKwand.init_tk(location)
+ return new TKwor.init_tk(location)
end
if accept_token == 33 then
- return new TKwor.init_tk(location)
+ return new TKwnot.init_tk(location)
end
if accept_token == 34 then
- return new TKwnot.init_tk(location)
+ return new TKwreturn.init_tk(location)
end
if accept_token == 35 then
- return new TKwreturn.init_tk(location)
+ return new TKwcontinue.init_tk(location)
end
if accept_token == 36 then
- return new TKwcontinue.init_tk(location)
+ return new TKwbreak.init_tk(location)
end
if accept_token == 37 then
- return new TKwbreak.init_tk(location)
+ return new TKwabort.init_tk(location)
end
if accept_token == 38 then
- return new TKwabort.init_tk(location)
+ return new TKwassert.init_tk(location)
end
if accept_token == 39 then
- return new TKwassert.init_tk(location)
+ return new TKwnew.init_tk(location)
end
if accept_token == 40 then
- return new TKwnew.init_tk(location)
+ return new TKwisa.init_tk(location)
end
if accept_token == 41 then
- return new TKwisa.init_tk(location)
+ return new TKwonce.init_tk(location)
end
if accept_token == 42 then
- return new TKwonce.init_tk(location)
+ return new TKwsuper.init_tk(location)
end
if accept_token == 43 then
- return new TKwsuper.init_tk(location)
+ return new TKwself.init_tk(location)
end
if accept_token == 44 then
- return new TKwself.init_tk(location)
+ return new TKwtrue.init_tk(location)
end
if accept_token == 45 then
- return new TKwtrue.init_tk(location)
+ return new TKwfalse.init_tk(location)
end
if accept_token == 46 then
- return new TKwfalse.init_tk(location)
+ return new TKwnull.init_tk(location)
end
if accept_token == 47 then
- return new TKwnull.init_tk(location)
+ return new TKwas.init_tk(location)
end
if accept_token == 48 then
- return new TKwas.init_tk(location)
+ return new TKwnullable.init_tk(location)
end
if accept_token == 49 then
- return new TKwnullable.init_tk(location)
+ return new TKwisset.init_tk(location)
end
if accept_token == 50 then
- return new TKwisset.init_tk(location)
+ return new TKwlabel.init_tk(location)
end
if accept_token == 51 then
- return new TKwlabel.init_tk(location)
+ return new TKwdebug.init_tk(location)
end
if accept_token == 52 then
return new TOpar.init_tk(location)
return new TBang.init_tk(location)
end
if accept_token == 80 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TClassid.init_tk(token_text, location)
+ return new TAt.init_tk(location)
end
if accept_token == 81 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TId.init_tk(token_text, location)
+ return new TClassid.init_tk(location)
end
if accept_token == 82 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TAttrid.init_tk(token_text, location)
+ return new TId.init_tk(location)
end
if accept_token == 83 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TNumber.init_tk(token_text, location)
+ return new TAttrid.init_tk(location)
end
if accept_token == 84 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TFloat.init_tk(token_text, location)
+ return new TNumber.init_tk(location)
end
if accept_token == 85 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TChar.init_tk(token_text, location)
+ return new TFloat.init_tk(location)
end
if accept_token == 86 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TString.init_tk(token_text, location)
+ return new TString.init_tk(location)
end
if accept_token == 87 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TStartString.init_tk(token_text, location)
+ return new TStartString.init_tk(location)
end
if accept_token == 88 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TMidString.init_tk(token_text, location)
+ return new TMidString.init_tk(location)
end
if accept_token == 89 then
- var token_text = string.substring(start_stream_pos, accept_length)
- return new TEndString.init_tk(token_text, location)
+ return new TEndString.init_tk(location)
+ end
+ if accept_token == 90 then
+ return new TChar.init_tk(location)
+ end
+ if accept_token == 91 then
+ return new TBadString.init_tk(location)
+ end
+ if accept_token == 92 then
+ return new TBadChar.init_tk(location)
+ end
+ if accept_token == 93 then
+ return new TExternCodeSegment.init_tk(location)
end
else
_stream_pos = sp
var location = new Location(_file, start_line + 1, start_line + 1, start_pos + 1, start_pos + 1)
if sp > start_stream_pos then
var text = string.substring(start_stream_pos, sp-start_stream_pos)
- var token = new AError.init_error("Syntax error: unknown token {text}.", location)
+ var token = new ALexerError.init_lexer_error("Syntax error: unknown token {text}.", location, text)
return token
else
- var token = new EOF(location)
+ var token = new EOF.init_tk(location)
return token
end
end