1 /** 2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef ES2PANDA_PARSER_INCLUDE_TOKEN_TYPE_H 17 #define ES2PANDA_PARSER_INCLUDE_TOKEN_TYPE_H 18 19 namespace panda::es2panda::lexer { 20 enum class TokenType { 21 EOS, 22 23 LITERAL_IDENT, 24 LITERAL_STRING, 25 LITERAL_CHAR, 26 LITERAL_NUMBER, 27 LITERAL_REGEXP, 28 LITERAL_TRUE, 29 LITERAL_FALSE, 30 LITERAL_NULL, 31 32 // Keep this order 33 PUNCTUATOR_NULLISH_COALESCING, 34 PUNCTUATOR_LOGICAL_OR, 35 PUNCTUATOR_LOGICAL_AND, 36 PUNCTUATOR_BITWISE_OR, 37 PUNCTUATOR_BITWISE_XOR, 38 PUNCTUATOR_BITWISE_AND, 39 PUNCTUATOR_EQUAL, 40 PUNCTUATOR_NOT_EQUAL, 41 PUNCTUATOR_STRICT_EQUAL, 42 PUNCTUATOR_NOT_STRICT_EQUAL, 43 PUNCTUATOR_LESS_THAN, 44 PUNCTUATOR_LESS_THAN_EQUAL, 45 PUNCTUATOR_GREATER_THAN, 46 PUNCTUATOR_GREATER_THAN_EQUAL, 47 PUNCTUATOR_LEFT_SHIFT, 48 PUNCTUATOR_RIGHT_SHIFT, 49 PUNCTUATOR_UNSIGNED_RIGHT_SHIFT, 50 PUNCTUATOR_PLUS, 51 PUNCTUATOR_MINUS, 52 PUNCTUATOR_MULTIPLY, 53 PUNCTUATOR_DIVIDE, 54 PUNCTUATOR_MOD, 55 KEYW_IN, 56 KEYW_INSTANCEOF, 57 PUNCTUATOR_EXPONENTIATION, 58 59 PUNCTUATOR_LEFT_PARENTHESIS, 60 PUNCTUATOR_RIGHT_PARENTHESIS, 61 PUNCTUATOR_LEFT_BRACE, 62 PUNCTUATOR_RIGHT_BRACE, 63 PUNCTUATOR_PERIOD, 64 PUNCTUATOR_PERIOD_PERIOD_PERIOD, 65 PUNCTUATOR_PERIOD_QUESTION, 66 PUNCTUATOR_COMMA, 67 PUNCTUATOR_COLON, 68 PUNCTUATOR_SEMI_COLON, 69 PUNCTUATOR_LEFT_SQUARE_BRACKET, 70 PUNCTUATOR_RIGHT_SQUARE_BRACKET, 71 PUNCTUATOR_QUESTION_MARK, 72 PUNCTUATOR_QUESTION_DOT, 73 PUNCTUATOR_TILDE, 74 PUNCTUATOR_EXCLAMATION_MARK, 75 PUNCTUATOR_PLUS_PLUS, 76 PUNCTUATOR_MINUS_MINUS, 77 PUNCTUATOR_SUBSTITUTION, 78 PUNCTUATOR_UNSIGNED_RIGHT_SHIFT_EQUAL, 79 PUNCTUATOR_RIGHT_SHIFT_EQUAL, 80 PUNCTUATOR_LEFT_SHIFT_EQUAL, 81 PUNCTUATOR_PLUS_EQUAL, 82 PUNCTUATOR_MINUS_EQUAL, 83 PUNCTUATOR_MULTIPLY_EQUAL, 84 PUNCTUATOR_DIVIDE_EQUAL, 85 PUNCTUATOR_MOD_EQUAL, 86 PUNCTUATOR_BITWISE_AND_EQUAL, 87 PUNCTUATOR_BITWISE_OR_EQUAL, 88 PUNCTUATOR_BITWISE_XOR_EQUAL, 89 PUNCTUATOR_LOGICAL_AND_EQUAL, 90 PUNCTUATOR_LOGICAL_OR_EQUAL, 91 PUNCTUATOR_LOGICAL_NULLISH_EQUAL, 92 PUNCTUATOR_EXPONENTIATION_EQUAL, 93 PUNCTUATOR_ARROW, 94 PUNCTUATOR_BACK_TICK, 95 PUNCTUATOR_HASH_MARK, 96 PUNCTUATOR_AT, 97 PUNCTUATOR_FORMAT, 98 PUNCTUATOR_DOLLAR_DOLLAR, 99 100 /* contextual keywords */ 101 KEYW_GET, 102 KEYW_SET, 103 KEYW_OF, 104 KEYW_FROM, 105 KEYW_AS, 106 KEYW_META, 107 KEYW_REQUIRE, 108 KEYW_ABSTRACT, 109 KEYW_TARGET, 110 KEYW_OUT, 111 112 /* reserved keywords */ 113 FIRST_KEYW, 114 KEYW_ANY = FIRST_KEYW, 115 KEYW_AWAIT, 116 KEYW_BIGINT, 117 KEYW_BOOLEAN, 118 KEYW_BYTE, 119 KEYW_BREAK, 120 KEYW_CASE, 121 KEYW_CATCH, 122 KEYW_CHAR, 123 KEYW_CLASS, 124 KEYW_CONST, 125 KEYW_CONSTRUCTOR, 126 KEYW_CONTINUE, 127 KEYW_DEBUGGER, 128 KEYW_DEFAULT, 129 KEYW_DELETE, 130 KEYW_DO, 131 KEYW_DOUBLE, 132 KEYW_ELSE, 133 KEYW_ENUM, 134 KEYW_EXPORT, 135 KEYW_EXTENDS, 136 KEYW_FINALLY, 137 KEYW_FLOAT, 138 KEYW_FOR, 139 KEYW_FUNCTION, 140 KEYW_IF, 141 KEYW_IMPORT, 142 KEYW_INT, 143 KEYW_LAUNCH, 144 KEYW_LONG, 145 KEYW_NATIVE, 146 KEYW_NEVER, 147 KEYW_NEW, 148 KEYW_NUMBER, 149 KEYW_OBJECT, 150 KEYW_FINAL, 151 KEYW_OVERRIDE, 152 KEYW_REGEXP, 153 KEYW_RETHROWS, 154 KEYW_RETURN, 155 KEYW_SHORT, 156 KEYW_STRING, 157 KEYW_STRUCT, 158 KEYW_SUPER, 159 KEYW_SWITCH, 160 KEYW_THIS, 161 KEYW_THROW, 162 KEYW_THROWS, 163 KEYW_TYPE, 164 KEYW_TRY, 165 KEYW_TYPEOF, 166 KEYW_UNDEFINED, 167 KEYW_UNKNOWN, 168 KEYW_VAR, 169 KEYW_VOID, 170 KEYW_WHILE, 171 KEYW_WITH, 172 KEYW_I8, 173 KEYW_I16, 174 KEYW_I32, 175 KEYW_I64, 176 KEYW_ISIZE, 177 KEYW_U8, 178 KEYW_U16, 179 KEYW_U32, 180 KEYW_U64, 181 KEYW_USIZE, 182 KEYW_F32, 183 KEYW_F64, 184 KEYW_V128, 185 KEYW_FUNCREF, 186 KEYW_EXTERNREF, 187 KEYW_ANYREF, 188 KEYW_EQREF, 189 KEYW_I31REF, 190 KEYW_DATAREF, 191 192 KEYW_ASYNC, 193 KEYW_READONLY, 194 KEYW_KEYOF, 195 KEYW_MODULE, 196 KEYW_NAMESPACE, 197 KEYW_INFER, 198 KEYW_DECLARE, 199 KEYW_ARGUMENTS, 200 KEYW_EVAL, 201 KEYW_STATIC, 202 KEYW_GLOBAL, 203 KEYW_IS, 204 KEYW_ASSERTS, 205 KEYW_ASSERT, 206 KEYW_TRAP, 207 208 /* strict mode future reserved keywords */ 209 KEYW_PRIVATE, 210 KEYW_PROTECTED, 211 KEYW_PUBLIC, 212 KEYW_INTERNAL, 213 KEYW_IMPLEMENTS, 214 KEYW_INTERFACE, 215 KEYW_PACKAGE, 216 217 /* context dependent future */ 218 KEYW_LET, 219 KEYW_YIELD, 220 }; 221 222 const char *TokenToString(TokenType type); 223 } // namespace panda::es2panda::lexer 224 225 #endif 226