lang-bootstrap/06/Lexer.lua

128 lines
10 KiB
Lua
Raw Normal View History

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