token_const.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. package token
  2. const (
  3. _ Token = iota
  4. ILLEGAL
  5. EOF
  6. COMMENT
  7. STRING
  8. NUMBER
  9. PLUS // +
  10. MINUS // -
  11. MULTIPLY // *
  12. EXPONENT // **
  13. SLASH // /
  14. REMAINDER // %
  15. AND // &
  16. OR // |
  17. EXCLUSIVE_OR // ^
  18. SHIFT_LEFT // <<
  19. SHIFT_RIGHT // >>
  20. UNSIGNED_SHIFT_RIGHT // >>>
  21. ADD_ASSIGN // +=
  22. SUBTRACT_ASSIGN // -=
  23. MULTIPLY_ASSIGN // *=
  24. EXPONENT_ASSIGN // **=
  25. QUOTIENT_ASSIGN // /=
  26. REMAINDER_ASSIGN // %=
  27. AND_ASSIGN // &=
  28. OR_ASSIGN // |=
  29. EXCLUSIVE_OR_ASSIGN // ^=
  30. SHIFT_LEFT_ASSIGN // <<=
  31. SHIFT_RIGHT_ASSIGN // >>=
  32. UNSIGNED_SHIFT_RIGHT_ASSIGN // >>>=
  33. LOGICAL_AND // &&
  34. LOGICAL_OR // ||
  35. COALESCE // ??
  36. INCREMENT // ++
  37. DECREMENT // --
  38. EQUAL // ==
  39. STRICT_EQUAL // ===
  40. LESS // <
  41. GREATER // >
  42. ASSIGN // =
  43. NOT // !
  44. BITWISE_NOT // ~
  45. NOT_EQUAL // !=
  46. STRICT_NOT_EQUAL // !==
  47. LESS_OR_EQUAL // <=
  48. GREATER_OR_EQUAL // >=
  49. LEFT_PARENTHESIS // (
  50. LEFT_BRACKET // [
  51. LEFT_BRACE // {
  52. COMMA // ,
  53. PERIOD // .
  54. RIGHT_PARENTHESIS // )
  55. RIGHT_BRACKET // ]
  56. RIGHT_BRACE // }
  57. SEMICOLON // ;
  58. COLON // :
  59. QUESTION_MARK // ?
  60. QUESTION_DOT // ?.
  61. ARROW // =>
  62. ELLIPSIS // ...
  63. BACKTICK // `
  64. PRIVATE_IDENTIFIER
  65. // tokens below (and only them) are syntactically valid identifiers
  66. IDENTIFIER
  67. KEYWORD
  68. BOOLEAN
  69. NULL
  70. IF
  71. IN
  72. OF
  73. DO
  74. VAR
  75. FOR
  76. NEW
  77. TRY
  78. THIS
  79. ELSE
  80. CASE
  81. VOID
  82. WITH
  83. CONST
  84. WHILE
  85. BREAK
  86. CATCH
  87. THROW
  88. CLASS
  89. SUPER
  90. RETURN
  91. TYPEOF
  92. DELETE
  93. SWITCH
  94. DEFAULT
  95. FINALLY
  96. EXTENDS
  97. FUNCTION
  98. CONTINUE
  99. DEBUGGER
  100. INSTANCEOF
  101. ESCAPED_RESERVED_WORD
  102. // Non-reserved keywords below
  103. LET
  104. STATIC
  105. ASYNC
  106. AWAIT
  107. YIELD
  108. )
  109. var token2string = [...]string{
  110. ILLEGAL: "ILLEGAL",
  111. EOF: "EOF",
  112. COMMENT: "COMMENT",
  113. KEYWORD: "KEYWORD",
  114. STRING: "STRING",
  115. BOOLEAN: "BOOLEAN",
  116. NULL: "NULL",
  117. NUMBER: "NUMBER",
  118. IDENTIFIER: "IDENTIFIER",
  119. PRIVATE_IDENTIFIER: "PRIVATE_IDENTIFIER",
  120. PLUS: "+",
  121. MINUS: "-",
  122. EXPONENT: "**",
  123. MULTIPLY: "*",
  124. SLASH: "/",
  125. REMAINDER: "%",
  126. AND: "&",
  127. OR: "|",
  128. EXCLUSIVE_OR: "^",
  129. SHIFT_LEFT: "<<",
  130. SHIFT_RIGHT: ">>",
  131. UNSIGNED_SHIFT_RIGHT: ">>>",
  132. ADD_ASSIGN: "+=",
  133. SUBTRACT_ASSIGN: "-=",
  134. MULTIPLY_ASSIGN: "*=",
  135. EXPONENT_ASSIGN: "**=",
  136. QUOTIENT_ASSIGN: "/=",
  137. REMAINDER_ASSIGN: "%=",
  138. AND_ASSIGN: "&=",
  139. OR_ASSIGN: "|=",
  140. EXCLUSIVE_OR_ASSIGN: "^=",
  141. SHIFT_LEFT_ASSIGN: "<<=",
  142. SHIFT_RIGHT_ASSIGN: ">>=",
  143. UNSIGNED_SHIFT_RIGHT_ASSIGN: ">>>=",
  144. LOGICAL_AND: "&&",
  145. LOGICAL_OR: "||",
  146. COALESCE: "??",
  147. INCREMENT: "++",
  148. DECREMENT: "--",
  149. EQUAL: "==",
  150. STRICT_EQUAL: "===",
  151. LESS: "<",
  152. GREATER: ">",
  153. ASSIGN: "=",
  154. NOT: "!",
  155. BITWISE_NOT: "~",
  156. NOT_EQUAL: "!=",
  157. STRICT_NOT_EQUAL: "!==",
  158. LESS_OR_EQUAL: "<=",
  159. GREATER_OR_EQUAL: ">=",
  160. LEFT_PARENTHESIS: "(",
  161. LEFT_BRACKET: "[",
  162. LEFT_BRACE: "{",
  163. COMMA: ",",
  164. PERIOD: ".",
  165. RIGHT_PARENTHESIS: ")",
  166. RIGHT_BRACKET: "]",
  167. RIGHT_BRACE: "}",
  168. SEMICOLON: ";",
  169. COLON: ":",
  170. QUESTION_MARK: "?",
  171. QUESTION_DOT: "?.",
  172. ARROW: "=>",
  173. ELLIPSIS: "...",
  174. BACKTICK: "`",
  175. IF: "if",
  176. IN: "in",
  177. OF: "of",
  178. DO: "do",
  179. VAR: "var",
  180. LET: "let",
  181. FOR: "for",
  182. NEW: "new",
  183. TRY: "try",
  184. THIS: "this",
  185. ELSE: "else",
  186. CASE: "case",
  187. VOID: "void",
  188. WITH: "with",
  189. ASYNC: "async",
  190. AWAIT: "await",
  191. YIELD: "yield",
  192. CONST: "const",
  193. WHILE: "while",
  194. BREAK: "break",
  195. CATCH: "catch",
  196. THROW: "throw",
  197. CLASS: "class",
  198. SUPER: "super",
  199. RETURN: "return",
  200. TYPEOF: "typeof",
  201. DELETE: "delete",
  202. SWITCH: "switch",
  203. STATIC: "static",
  204. DEFAULT: "default",
  205. FINALLY: "finally",
  206. EXTENDS: "extends",
  207. FUNCTION: "function",
  208. CONTINUE: "continue",
  209. DEBUGGER: "debugger",
  210. INSTANCEOF: "instanceof",
  211. }
  212. var keywordTable = map[string]_keyword{
  213. "if": {
  214. token: IF,
  215. },
  216. "in": {
  217. token: IN,
  218. },
  219. "do": {
  220. token: DO,
  221. },
  222. "var": {
  223. token: VAR,
  224. },
  225. "for": {
  226. token: FOR,
  227. },
  228. "new": {
  229. token: NEW,
  230. },
  231. "try": {
  232. token: TRY,
  233. },
  234. "this": {
  235. token: THIS,
  236. },
  237. "else": {
  238. token: ELSE,
  239. },
  240. "case": {
  241. token: CASE,
  242. },
  243. "void": {
  244. token: VOID,
  245. },
  246. "with": {
  247. token: WITH,
  248. },
  249. "async": {
  250. token: ASYNC,
  251. },
  252. "while": {
  253. token: WHILE,
  254. },
  255. "break": {
  256. token: BREAK,
  257. },
  258. "catch": {
  259. token: CATCH,
  260. },
  261. "throw": {
  262. token: THROW,
  263. },
  264. "return": {
  265. token: RETURN,
  266. },
  267. "typeof": {
  268. token: TYPEOF,
  269. },
  270. "delete": {
  271. token: DELETE,
  272. },
  273. "switch": {
  274. token: SWITCH,
  275. },
  276. "default": {
  277. token: DEFAULT,
  278. },
  279. "finally": {
  280. token: FINALLY,
  281. },
  282. "function": {
  283. token: FUNCTION,
  284. },
  285. "continue": {
  286. token: CONTINUE,
  287. },
  288. "debugger": {
  289. token: DEBUGGER,
  290. },
  291. "instanceof": {
  292. token: INSTANCEOF,
  293. },
  294. "const": {
  295. token: CONST,
  296. },
  297. "class": {
  298. token: CLASS,
  299. },
  300. "enum": {
  301. token: KEYWORD,
  302. futureKeyword: true,
  303. },
  304. "export": {
  305. token: KEYWORD,
  306. futureKeyword: true,
  307. },
  308. "extends": {
  309. token: EXTENDS,
  310. },
  311. "import": {
  312. token: KEYWORD,
  313. futureKeyword: true,
  314. },
  315. "super": {
  316. token: SUPER,
  317. },
  318. /*
  319. "implements": {
  320. token: KEYWORD,
  321. futureKeyword: true,
  322. strict: true,
  323. },
  324. "interface": {
  325. token: KEYWORD,
  326. futureKeyword: true,
  327. strict: true,
  328. },*/
  329. "let": {
  330. token: LET,
  331. strict: true,
  332. },
  333. /*"package": {
  334. token: KEYWORD,
  335. futureKeyword: true,
  336. strict: true,
  337. },
  338. "private": {
  339. token: KEYWORD,
  340. futureKeyword: true,
  341. strict: true,
  342. },
  343. "protected": {
  344. token: KEYWORD,
  345. futureKeyword: true,
  346. strict: true,
  347. },
  348. "public": {
  349. token: KEYWORD,
  350. futureKeyword: true,
  351. strict: true,
  352. },*/
  353. "static": {
  354. token: STATIC,
  355. strict: true,
  356. },
  357. "await": {
  358. token: AWAIT,
  359. },
  360. "yield": {
  361. token: YIELD,
  362. },
  363. "false": {
  364. token: BOOLEAN,
  365. },
  366. "true": {
  367. token: BOOLEAN,
  368. },
  369. "null": {
  370. token: NULL,
  371. },
  372. }