token_const.go 6.8 KB

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