UNPKG

@tsukiroku/tiny

Version:
145 lines (144 loc) 5.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fromLiteral = exports.tokens = exports.TokenType = void 0; var TokenType; (function (TokenType) { TokenType["ILLEGAL"] = "ILLEGAL"; TokenType["EOF"] = "EOF"; TokenType["IDENT"] = "IDENT"; TokenType["NUMBER"] = "NUMBER"; TokenType["STRING"] = "STRING"; TokenType["TRUE"] = "TRUE"; TokenType["FALSE"] = "FALSE"; TokenType["NULL"] = "NULL"; TokenType["FUNCTION"] = "FUNCTION"; TokenType["COMMENT"] = "COMMENT"; TokenType["ELEMENT"] = "ELEMENT"; TokenType["NULLISH"] = "NULLISH"; TokenType["ASSIGN"] = "="; TokenType["PLUS"] = "+"; TokenType["MINUS"] = "-"; TokenType["BANG"] = "!"; TokenType["ASTERISK"] = "*"; TokenType["SLASH"] = "/"; TokenType["PERCENT"] = "%"; TokenType["QUESTION"] = "?"; TokenType["AT"] = "@"; TokenType["QUOTE"] = "\""; TokenType["SINGLE_QUOTE"] = "'"; TokenType["LT"] = "<"; TokenType["GT"] = ">"; TokenType["LTE"] = "<="; TokenType["GTE"] = ">="; TokenType["EQUAL"] = "=="; TokenType["NOT_EQUAL"] = "!="; TokenType["AND"] = "&&"; TokenType["OR"] = "||"; TokenType["COMMA"] = ","; TokenType["COLON"] = ":"; TokenType["SEMICOLON"] = ";"; TokenType["LPAREN"] = "("; TokenType["RPAREN"] = ")"; TokenType["LBRACE"] = "{"; TokenType["RBRACE"] = "}"; TokenType["LBRACKET"] = "["; TokenType["RBRACKET"] = "]"; TokenType["LET"] = "LET"; TokenType["IF"] = "IF"; TokenType["ELSE"] = "ELSE"; TokenType["RETURN"] = "RETURN"; TokenType["WHILE"] = "WHILE"; TokenType["IN"] = "IN"; TokenType["TYPEOF"] = "TYPEOF"; TokenType["THROW"] = "THROW"; TokenType["DELETE"] = "DELETE"; TokenType["USE"] = "USE"; TokenType["VOID"] = "VOID"; TokenType["EXPR"] = "EXPR"; TokenType["CLASS"] = "CLASS"; TokenType["FOR"] = "FOR"; TokenType["CONST"] = "CONST"; })(TokenType || (TokenType = {})); exports.TokenType = TokenType; const tokens = [ { curr: '=', next: '=', tokenType: TokenType.EQUAL }, { curr: '/', next: '/', commentToken: TokenType.COMMENT }, { curr: '!', next: '=', tokenType: TokenType.NOT_EQUAL }, { curr: '<', next: '-', tokenType: TokenType.ELEMENT }, { curr: '<', next: '=', tokenType: TokenType.LTE }, { curr: '>', next: '=', tokenType: TokenType.GTE }, { curr: '&', next: '&', tokenType: TokenType.AND }, { curr: '|', next: '|', tokenType: TokenType.OR }, { curr: '?', next: '?', tokenType: TokenType.NULLISH }, { curr: '=', tokenType: TokenType.ASSIGN }, { curr: '(', tokenType: TokenType.LPAREN }, { curr: ')', tokenType: TokenType.RPAREN }, { curr: '{', tokenType: TokenType.LBRACE }, { curr: '}', tokenType: TokenType.RBRACE }, { curr: '[', tokenType: TokenType.LBRACKET }, { curr: ']', tokenType: TokenType.RBRACKET }, { curr: ';', tokenType: TokenType.SEMICOLON }, { curr: '.', tokenType: TokenType.ELEMENT }, { curr: ',', tokenType: TokenType.COMMA }, { curr: '+', tokenType: TokenType.PLUS }, { curr: '-', tokenType: TokenType.MINUS }, { curr: '*', tokenType: TokenType.ASTERISK }, { curr: '/', tokenType: TokenType.SLASH }, { curr: '%', tokenType: TokenType.PERCENT }, { curr: '!', tokenType: TokenType.BANG }, { curr: '<', tokenType: TokenType.LT }, { curr: '>', tokenType: TokenType.GT }, { curr: '?', tokenType: TokenType.QUESTION }, { curr: '@', tokenType: TokenType.AT }, { curr: '"', stringToken: TokenType.QUOTE }, { curr: "'", stringToken: TokenType.SINGLE_QUOTE }, { curr: ':', tokenType: TokenType.COLON }, { curr: '\0', tokenType: TokenType.EOF }, ]; exports.tokens = tokens; const fromLiteral = (literal) => { switch (literal) { case 'let': return TokenType.LET; case 'func': return TokenType.FUNCTION; case 'true': return TokenType.TRUE; case 'false': return TokenType.FALSE; case 'null': return TokenType.NULL; case 'if': return TokenType.IF; case 'else': return TokenType.ELSE; case 'return': return TokenType.RETURN; case 'while': return TokenType.WHILE; case 'in': return TokenType.IN; case 'typeof': return TokenType.TYPEOF; case 'throw': return TokenType.THROW; case 'delete': return TokenType.DELETE; case 'use': return TokenType.USE; case 'void': return TokenType.VOID; case 'expr': return TokenType.EXPR; // Not used, but may be added later case 'class': return TokenType.CLASS; case 'for': return TokenType.FOR; case 'const': return TokenType.CONST; default: return TokenType.IDENT; } }; exports.fromLiteral = fromLiteral;