401 lines
7.5 KiB
Go
401 lines
7.5 KiB
Go
package token
|
|
|
|
const (
|
|
_ Token = iota
|
|
|
|
ILLEGAL
|
|
EOF
|
|
COMMENT
|
|
|
|
STRING
|
|
NUMBER
|
|
|
|
PLUS // +
|
|
MINUS // -
|
|
MULTIPLY // *
|
|
EXPONENT // **
|
|
SLASH // /
|
|
REMAINDER // %
|
|
|
|
AND // &
|
|
OR // |
|
|
EXCLUSIVE_OR // ^
|
|
SHIFT_LEFT // <<
|
|
SHIFT_RIGHT // >>
|
|
UNSIGNED_SHIFT_RIGHT // >>>
|
|
|
|
ADD_ASSIGN // +=
|
|
SUBTRACT_ASSIGN // -=
|
|
MULTIPLY_ASSIGN // *=
|
|
EXPONENT_ASSIGN // **=
|
|
QUOTIENT_ASSIGN // /=
|
|
REMAINDER_ASSIGN // %=
|
|
|
|
AND_ASSIGN // &=
|
|
OR_ASSIGN // |=
|
|
EXCLUSIVE_OR_ASSIGN // ^=
|
|
SHIFT_LEFT_ASSIGN // <<=
|
|
SHIFT_RIGHT_ASSIGN // >>=
|
|
UNSIGNED_SHIFT_RIGHT_ASSIGN // >>>=
|
|
|
|
LOGICAL_AND // &&
|
|
LOGICAL_OR // ||
|
|
COALESCE // ??
|
|
INCREMENT // ++
|
|
DECREMENT // --
|
|
|
|
EQUAL // ==
|
|
STRICT_EQUAL // ===
|
|
LESS // <
|
|
GREATER // >
|
|
ASSIGN // =
|
|
NOT // !
|
|
|
|
BITWISE_NOT // ~
|
|
|
|
NOT_EQUAL // !=
|
|
STRICT_NOT_EQUAL // !==
|
|
LESS_OR_EQUAL // <=
|
|
GREATER_OR_EQUAL // >=
|
|
|
|
LEFT_PARENTHESIS // (
|
|
LEFT_BRACKET // [
|
|
LEFT_BRACE // {
|
|
COMMA // ,
|
|
PERIOD // .
|
|
|
|
RIGHT_PARENTHESIS // )
|
|
RIGHT_BRACKET // ]
|
|
RIGHT_BRACE // }
|
|
SEMICOLON // ;
|
|
COLON // :
|
|
QUESTION_MARK // ?
|
|
QUESTION_DOT // ?.
|
|
ARROW // =>
|
|
ELLIPSIS // ...
|
|
BACKTICK // `
|
|
|
|
PRIVATE_IDENTIFIER
|
|
|
|
// tokens below (and only them) are syntactically valid identifiers
|
|
|
|
IDENTIFIER
|
|
KEYWORD
|
|
BOOLEAN
|
|
NULL
|
|
|
|
IF
|
|
IN
|
|
OF
|
|
DO
|
|
|
|
VAR
|
|
FOR
|
|
NEW
|
|
TRY
|
|
|
|
THIS
|
|
ELSE
|
|
CASE
|
|
VOID
|
|
WITH
|
|
|
|
CONST
|
|
WHILE
|
|
BREAK
|
|
CATCH
|
|
THROW
|
|
CLASS
|
|
SUPER
|
|
|
|
RETURN
|
|
TYPEOF
|
|
DELETE
|
|
SWITCH
|
|
|
|
DEFAULT
|
|
FINALLY
|
|
EXTENDS
|
|
|
|
FUNCTION
|
|
CONTINUE
|
|
DEBUGGER
|
|
|
|
INSTANCEOF
|
|
|
|
ESCAPED_RESERVED_WORD
|
|
// Non-reserved keywords below
|
|
|
|
LET
|
|
STATIC
|
|
ASYNC
|
|
AWAIT
|
|
YIELD
|
|
)
|
|
|
|
var token2string = [...]string{
|
|
ILLEGAL: "ILLEGAL",
|
|
EOF: "EOF",
|
|
COMMENT: "COMMENT",
|
|
KEYWORD: "KEYWORD",
|
|
STRING: "STRING",
|
|
BOOLEAN: "BOOLEAN",
|
|
NULL: "NULL",
|
|
NUMBER: "NUMBER",
|
|
IDENTIFIER: "IDENTIFIER",
|
|
PRIVATE_IDENTIFIER: "PRIVATE_IDENTIFIER",
|
|
PLUS: "+",
|
|
MINUS: "-",
|
|
EXPONENT: "**",
|
|
MULTIPLY: "*",
|
|
SLASH: "/",
|
|
REMAINDER: "%",
|
|
AND: "&",
|
|
OR: "|",
|
|
EXCLUSIVE_OR: "^",
|
|
SHIFT_LEFT: "<<",
|
|
SHIFT_RIGHT: ">>",
|
|
UNSIGNED_SHIFT_RIGHT: ">>>",
|
|
ADD_ASSIGN: "+=",
|
|
SUBTRACT_ASSIGN: "-=",
|
|
MULTIPLY_ASSIGN: "*=",
|
|
EXPONENT_ASSIGN: "**=",
|
|
QUOTIENT_ASSIGN: "/=",
|
|
REMAINDER_ASSIGN: "%=",
|
|
AND_ASSIGN: "&=",
|
|
OR_ASSIGN: "|=",
|
|
EXCLUSIVE_OR_ASSIGN: "^=",
|
|
SHIFT_LEFT_ASSIGN: "<<=",
|
|
SHIFT_RIGHT_ASSIGN: ">>=",
|
|
UNSIGNED_SHIFT_RIGHT_ASSIGN: ">>>=",
|
|
LOGICAL_AND: "&&",
|
|
LOGICAL_OR: "||",
|
|
COALESCE: "??",
|
|
INCREMENT: "++",
|
|
DECREMENT: "--",
|
|
EQUAL: "==",
|
|
STRICT_EQUAL: "===",
|
|
LESS: "<",
|
|
GREATER: ">",
|
|
ASSIGN: "=",
|
|
NOT: "!",
|
|
BITWISE_NOT: "~",
|
|
NOT_EQUAL: "!=",
|
|
STRICT_NOT_EQUAL: "!==",
|
|
LESS_OR_EQUAL: "<=",
|
|
GREATER_OR_EQUAL: ">=",
|
|
LEFT_PARENTHESIS: "(",
|
|
LEFT_BRACKET: "[",
|
|
LEFT_BRACE: "{",
|
|
COMMA: ",",
|
|
PERIOD: ".",
|
|
RIGHT_PARENTHESIS: ")",
|
|
RIGHT_BRACKET: "]",
|
|
RIGHT_BRACE: "}",
|
|
SEMICOLON: ";",
|
|
COLON: ":",
|
|
QUESTION_MARK: "?",
|
|
QUESTION_DOT: "?.",
|
|
ARROW: "=>",
|
|
ELLIPSIS: "...",
|
|
BACKTICK: "`",
|
|
IF: "if",
|
|
IN: "in",
|
|
OF: "of",
|
|
DO: "do",
|
|
VAR: "var",
|
|
LET: "let",
|
|
FOR: "for",
|
|
NEW: "new",
|
|
TRY: "try",
|
|
THIS: "this",
|
|
ELSE: "else",
|
|
CASE: "case",
|
|
VOID: "void",
|
|
WITH: "with",
|
|
ASYNC: "async",
|
|
AWAIT: "await",
|
|
YIELD: "yield",
|
|
CONST: "const",
|
|
WHILE: "while",
|
|
BREAK: "break",
|
|
CATCH: "catch",
|
|
THROW: "throw",
|
|
CLASS: "class",
|
|
SUPER: "super",
|
|
RETURN: "return",
|
|
TYPEOF: "typeof",
|
|
DELETE: "delete",
|
|
SWITCH: "switch",
|
|
STATIC: "static",
|
|
DEFAULT: "default",
|
|
FINALLY: "finally",
|
|
EXTENDS: "extends",
|
|
FUNCTION: "function",
|
|
CONTINUE: "continue",
|
|
DEBUGGER: "debugger",
|
|
INSTANCEOF: "instanceof",
|
|
}
|
|
|
|
var keywordTable = map[string]_keyword{
|
|
"if": {
|
|
token: IF,
|
|
},
|
|
"in": {
|
|
token: IN,
|
|
},
|
|
"do": {
|
|
token: DO,
|
|
},
|
|
"var": {
|
|
token: VAR,
|
|
},
|
|
"for": {
|
|
token: FOR,
|
|
},
|
|
"new": {
|
|
token: NEW,
|
|
},
|
|
"try": {
|
|
token: TRY,
|
|
},
|
|
"this": {
|
|
token: THIS,
|
|
},
|
|
"else": {
|
|
token: ELSE,
|
|
},
|
|
"case": {
|
|
token: CASE,
|
|
},
|
|
"void": {
|
|
token: VOID,
|
|
},
|
|
"with": {
|
|
token: WITH,
|
|
},
|
|
"async": {
|
|
token: ASYNC,
|
|
},
|
|
"while": {
|
|
token: WHILE,
|
|
},
|
|
"break": {
|
|
token: BREAK,
|
|
},
|
|
"catch": {
|
|
token: CATCH,
|
|
},
|
|
"throw": {
|
|
token: THROW,
|
|
},
|
|
"return": {
|
|
token: RETURN,
|
|
},
|
|
"typeof": {
|
|
token: TYPEOF,
|
|
},
|
|
"delete": {
|
|
token: DELETE,
|
|
},
|
|
"switch": {
|
|
token: SWITCH,
|
|
},
|
|
"default": {
|
|
token: DEFAULT,
|
|
},
|
|
"finally": {
|
|
token: FINALLY,
|
|
},
|
|
"function": {
|
|
token: FUNCTION,
|
|
},
|
|
"continue": {
|
|
token: CONTINUE,
|
|
},
|
|
"debugger": {
|
|
token: DEBUGGER,
|
|
},
|
|
"instanceof": {
|
|
token: INSTANCEOF,
|
|
},
|
|
"const": {
|
|
token: CONST,
|
|
},
|
|
"class": {
|
|
token: CLASS,
|
|
},
|
|
"enum": {
|
|
token: KEYWORD,
|
|
futureKeyword: true,
|
|
},
|
|
"export": {
|
|
token: KEYWORD,
|
|
futureKeyword: true,
|
|
},
|
|
"extends": {
|
|
token: EXTENDS,
|
|
},
|
|
"import": {
|
|
token: KEYWORD,
|
|
futureKeyword: true,
|
|
},
|
|
"super": {
|
|
token: SUPER,
|
|
},
|
|
/*
|
|
"implements": {
|
|
token: KEYWORD,
|
|
futureKeyword: true,
|
|
strict: true,
|
|
},
|
|
"interface": {
|
|
token: KEYWORD,
|
|
futureKeyword: true,
|
|
strict: true,
|
|
},*/
|
|
"let": {
|
|
token: LET,
|
|
strict: true,
|
|
},
|
|
/*"package": {
|
|
token: KEYWORD,
|
|
futureKeyword: true,
|
|
strict: true,
|
|
},
|
|
"private": {
|
|
token: KEYWORD,
|
|
futureKeyword: true,
|
|
strict: true,
|
|
},
|
|
"protected": {
|
|
token: KEYWORD,
|
|
futureKeyword: true,
|
|
strict: true,
|
|
},
|
|
"public": {
|
|
token: KEYWORD,
|
|
futureKeyword: true,
|
|
strict: true,
|
|
},*/
|
|
"static": {
|
|
token: STATIC,
|
|
strict: true,
|
|
},
|
|
"await": {
|
|
token: AWAIT,
|
|
},
|
|
"yield": {
|
|
token: YIELD,
|
|
},
|
|
"false": {
|
|
token: BOOLEAN,
|
|
},
|
|
"true": {
|
|
token: BOOLEAN,
|
|
},
|
|
"null": {
|
|
token: NULL,
|
|
},
|
|
}
|