token_const.go 6.7 KB

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