token_const.go 7.7 KB

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