128 lines
10 KiB
Lua
128 lines
10 KiB
Lua
|
Reverse = {
|
||
|
"addrspace", "align", "allowzero", "and", "anyframe", "anytype", "asm", "async",
|
||
|
"await", "break", "callconv", "catch", "comptime", "const", "continue", "defer",
|
||
|
"else", "enum", "errdefer", "error", "export", "extern", "fn", "for", "if",
|
||
|
"inline", "noalias", "noinline", "IDENTIFIER", "nosuspend", "opaque", "or",
|
||
|
"orelse", "packed", "pub", "resume", "return", "linksection", "struct", "suspend",
|
||
|
"switch", "test", "threadlocal", "try", "union", "unreachable", "usingnamespace",
|
||
|
"var", "volatile", "while", "INVALID", ".**", "!", "|", "||", "|=", "=", "==",
|
||
|
"=>", "!=", "(", ")", ";", "%", "%=", "{", "}", "[", "]", ".", ".*", "..", "...",
|
||
|
"^", "^=", "+", "++", "+=", "+%", "+%=", "+|", "+|=", "-", "-=", "-%", "-%=", "-|",
|
||
|
"-|=", "*", "*=", "**", "*%", "*%=", "*|", "*|=", "->", ":", "/", "/=", ",", "&",
|
||
|
"&=", "?", "<", "<=", "<<", "<<=", "<<|", "<<|=", ">", ">=", ">>", ">>=", "~",
|
||
|
"STRING_LITERAL", "CHAR_LITERAL", "EOF", "BUILTIN", "NUMBER_LITERAL", "DOC_COMMENT",
|
||
|
"CONTAINER_DOC_COMMENT",
|
||
|
}
|
||
|
|
||
|
Tokens = {
|
||
|
ADDRSPACE = 1, ALIGN = 2,
|
||
|
ALLOWZERO = 3, AND = 4,
|
||
|
ANYFRAME = 5, ANYTYPE = 6,
|
||
|
ASM = 7, ASYNC = 8,
|
||
|
AWAIT = 9, BREAK = 10,
|
||
|
CALLCONV = 11, CATCH = 12,
|
||
|
COMPTIME = 13, CONST = 14,
|
||
|
CONTINUE = 15, DEFER = 16,
|
||
|
ELSE = 17, ENUM = 18,
|
||
|
ERRDEFER = 19, ERROR = 20,
|
||
|
EXPORT = 21, EXTERN = 22,
|
||
|
FN = 23, FOR = 24,
|
||
|
IF = 25, INLINE = 26,
|
||
|
NOALIAS = 27, NOINLINE = 28,
|
||
|
IDENTIFIER = 29, NOSUSPEND = 30,
|
||
|
OPAQUE = 31, OR = 32,
|
||
|
ORELSE = 33, PACKED = 34,
|
||
|
PUB = 35, RESUME = 36,
|
||
|
RETURN = 37, LINKSECTION = 38,
|
||
|
STRUCT = 39, SUSPEND = 40,
|
||
|
SWITCH = 41, TEST = 42,
|
||
|
THREADLOCAL = 43, TRY = 44,
|
||
|
UNION = 45, UNREACHABLE = 46,
|
||
|
USINGNAMESPACE = 47, VAR = 48,
|
||
|
VOLATILE = 49, WHILE = 50,
|
||
|
INVALID = 51, INVALID_PERIODASTERISKS = 52,
|
||
|
BANG = 53, PIPE = 54,
|
||
|
PIPE_PIPE = 55, PIPE_EQUAL = 56,
|
||
|
EQUAL = 57, EQUAL_EQUAL = 58,
|
||
|
EQUAL_ANGLE_BRACKET_RIGHT = 59, BANG_EQUAL = 60,
|
||
|
L_PAREN = 61, R_PAREN = 62,
|
||
|
SEMICOLON = 63, PERCENT = 64,
|
||
|
PERCENT_EQUAL = 65, L_BRACE = 66,
|
||
|
R_BRACE = 67, L_BRACKET = 68,
|
||
|
R_BRACKET = 69, PERIOD = 70,
|
||
|
PERIOD_ASTERISK = 71, ELLIPSIS2 = 72,
|
||
|
ELLIPSIS3 = 73, CARET = 74,
|
||
|
CARET_EQUAL = 75, PLUS = 76,
|
||
|
PLUS_PLUS = 77, PLUS_EQUAL = 78,
|
||
|
PLUS_PERCENT = 79, PLUS_PERCENT_EQUAL = 80,
|
||
|
PLUS_PIPE = 81, PLUS_PIPE_EQUAL = 82,
|
||
|
MINUS = 83, MINUS_EQUAL = 84,
|
||
|
MINUS_PERCENT = 85, MINUS_PERCENT_EQUAL = 86,
|
||
|
MINUS_PIPE = 87, MINUS_PIPE_EQUAL = 88,
|
||
|
ASTERISK = 89, ASTERISK_EQUAL = 90,
|
||
|
ASTERISK_ASTERISK = 91, ASTERISK_PERCENT = 92,
|
||
|
ASTERISK_PERCENT_EQUAL = 93, ASTERISK_PIPE = 94,
|
||
|
ASTERISK_PIPE_EQUAL = 95, ARROW = 96,
|
||
|
COLON = 97, SLASH = 98,
|
||
|
SLASH_EQUAL = 99, COMMA = 100,
|
||
|
AMPERSAND = 101, AMPERSAND_EQUAL = 102,
|
||
|
QUESTION_MARK = 103, ANGLE_BRACKET_LEFT = 104,
|
||
|
ANGLE_BRACKET_LEFT_EQUAL = 105, ANGLE_BRACKET_ANGLE_BRACKET_LEFT = 106,
|
||
|
ANGLE_BRACKET_ANGLE_BRACKET_LEFT_EQUAL = 107, ANGLE_BRACKET_ANGLE_BRACKET_LEFT_PIPE = 108,
|
||
|
ANGLE_BRACKET_ANGLE_BRACKET_LEFT_PIPE_EQUAL = 109, ANGLE_BRACKET_RIGHT = 110,
|
||
|
ANGLE_BRACKET_RIGHT_EQUAL = 111, ANGLE_BRACKET_ANGLE_BRACKET_RIGHT = 112,
|
||
|
ANGLE_BRACKET_ANGLE_BRACKET_RIGHT_EQUAL = 113, TILDE = 114,
|
||
|
STRING_LITERAL = 115, CHAR_LITERAL = 116,
|
||
|
EOF = 117, BUILTIN = 118,
|
||
|
NUMBER_LITERAL = 119, DOC_COMMENT = 120,
|
||
|
CONTAINER_DOC_COMMENT = 121,
|
||
|
}
|
||
|
|
||
|
|
||
|
State = {
|
||
|
START = 1, IDENTIFIER = 2,
|
||
|
BUILTIN = 3, STRING_LITERAL = 5,
|
||
|
STRING_LITERAL_BACKSLASH = 6, MULTILINE_STRING_LITERAL_LINE = 7,
|
||
|
CHAR_LITERAL = 8, CHAR_LITERAL_BACKSLASH = 9,
|
||
|
CHAR_LITERAL_HEX_ESCAPE = 10, CHAR_LITERAL_UNICODE_ESCAPE_SAW_U = 11,
|
||
|
CHAR_LITERAL_UNICODE_ESCAPE = 12, CHAR_LITERAL_UNICODE_INVALID = 13,
|
||
|
CHAR_LITERAL_UNICODE = 14, CHAR_LITERAL_END = 15,
|
||
|
BACKSLASH = 16, EQUAL = 17,
|
||
|
BANG = 18, PIPE = 19,
|
||
|
MINUS = 20, MINUS_PERCENT = 21,
|
||
|
MINUS_PIPE = 22, ASTERISK = 23,
|
||
|
ASTERISK_PERCENT = 24, ASTERISK_PIPE = 25,
|
||
|
SLASH = 26, LINE_COMMENT_START = 27,
|
||
|
LINE_COMMENT = 28, DOC_COMMENT_START = 29,
|
||
|
DOC_COMMENT = 30, INT = 31,
|
||
|
INT_EXPONENT = 32, INT_PERIOD = 33,
|
||
|
FLOAT = 34, FLOAT_EXPONENT = 35,
|
||
|
AMPERSAND = 36, CARET = 37,
|
||
|
PERCENT = 38, PLUS = 39,
|
||
|
PLUS_PERCENT = 40, PLUS_PIPE = 41,
|
||
|
ANGLE_BRACKET_LEFT = 42, ANGLE_BRACKET_ANGLE_BRACKET_LEFT = 43,
|
||
|
ANGLE_BRACKET_ANGLE_BRACKET_LEFT_PIPE = 44, ANGLE_BRACKET_RIGHT = 45,
|
||
|
ANGLE_BRACKET_ANGLE_BRACKET_RIGHT = 46, PERIOD = 47,
|
||
|
PERIOD_2 = 48, PERIOD_ASTERISK = 49,
|
||
|
SAW_AT_SIGN = 50,
|
||
|
}
|
||
|
|
||
|
Lexer = {
|
||
|
Reverse,
|
||
|
Tokens,
|
||
|
State,
|
||
|
x = 0,
|
||
|
}
|
||
|
|
||
|
function Lexer:new()
|
||
|
local l = {}
|
||
|
setmetatable(l, self)
|
||
|
self.__index = self
|
||
|
return l
|
||
|
end
|
||
|
|
||
|
function Lexer:lex(char)
|
||
|
|
||
|
end
|
||
|
|
||
|
return Lexer
|