token_const.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  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. AND_NOT // &^
  25. ADD_ASSIGN // +=
  26. SUBTRACT_ASSIGN // -=
  27. MULTIPLY_ASSIGN // *=
  28. QUOTIENT_ASSIGN // /=
  29. REMAINDER_ASSIGN // %=
  30. AND_ASSIGN // &=
  31. OR_ASSIGN // |=
  32. EXCLUSIVE_OR_ASSIGN // ^=
  33. SHIFT_LEFT_ASSIGN // <<=
  34. SHIFT_RIGHT_ASSIGN // >>=
  35. UNSIGNED_SHIFT_RIGHT_ASSIGN // >>>=
  36. AND_NOT_ASSIGN // &^=
  37. LOGICAL_AND // &&
  38. LOGICAL_OR // ||
  39. INCREMENT // ++
  40. DECREMENT // --
  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. firstKeyword
  64. IF
  65. IN
  66. OF
  67. DO
  68. VAR
  69. FOR
  70. NEW
  71. TRY
  72. THIS
  73. ELSE
  74. CASE
  75. VOID
  76. WITH
  77. WHILE
  78. BREAK
  79. CATCH
  80. THROW
  81. RETURN
  82. TYPEOF
  83. DELETE
  84. SWITCH
  85. DEFAULT
  86. FINALLY
  87. FUNCTION
  88. CONTINUE
  89. DEBUGGER
  90. INSTANCEOF
  91. lastKeyword
  92. )
  93. var token2string = [...]string{
  94. ILLEGAL: "ILLEGAL",
  95. EOF: "EOF",
  96. COMMENT: "COMMENT",
  97. KEYWORD: "KEYWORD",
  98. STRING: "STRING",
  99. BOOLEAN: "BOOLEAN",
  100. NULL: "NULL",
  101. NUMBER: "NUMBER",
  102. IDENTIFIER: "IDENTIFIER",
  103. PLUS: "+",
  104. MINUS: "-",
  105. MULTIPLY: "*",
  106. SLASH: "/",
  107. REMAINDER: "%",
  108. AND: "&",
  109. OR: "|",
  110. EXCLUSIVE_OR: "^",
  111. SHIFT_LEFT: "<<",
  112. SHIFT_RIGHT: ">>",
  113. UNSIGNED_SHIFT_RIGHT: ">>>",
  114. AND_NOT: "&^",
  115. ADD_ASSIGN: "+=",
  116. SUBTRACT_ASSIGN: "-=",
  117. MULTIPLY_ASSIGN: "*=",
  118. QUOTIENT_ASSIGN: "/=",
  119. REMAINDER_ASSIGN: "%=",
  120. AND_ASSIGN: "&=",
  121. OR_ASSIGN: "|=",
  122. EXCLUSIVE_OR_ASSIGN: "^=",
  123. SHIFT_LEFT_ASSIGN: "<<=",
  124. SHIFT_RIGHT_ASSIGN: ">>=",
  125. UNSIGNED_SHIFT_RIGHT_ASSIGN: ">>>=",
  126. AND_NOT_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. IF: "if",
  154. IN: "in",
  155. OF: "of",
  156. DO: "do",
  157. VAR: "var",
  158. FOR: "for",
  159. NEW: "new",
  160. TRY: "try",
  161. THIS: "this",
  162. ELSE: "else",
  163. CASE: "case",
  164. VOID: "void",
  165. WITH: "with",
  166. WHILE: "while",
  167. BREAK: "break",
  168. CATCH: "catch",
  169. THROW: "throw",
  170. RETURN: "return",
  171. TYPEOF: "typeof",
  172. DELETE: "delete",
  173. SWITCH: "switch",
  174. DEFAULT: "default",
  175. FINALLY: "finally",
  176. FUNCTION: "function",
  177. CONTINUE: "continue",
  178. DEBUGGER: "debugger",
  179. INSTANCEOF: "instanceof",
  180. }
  181. var keywordTable = map[string]_keyword{
  182. "if": {
  183. token: IF,
  184. },
  185. "in": {
  186. token: IN,
  187. },
  188. "of": {
  189. token: OF,
  190. },
  191. "do": {
  192. token: DO,
  193. },
  194. "var": {
  195. token: VAR,
  196. },
  197. "for": {
  198. token: FOR,
  199. },
  200. "new": {
  201. token: NEW,
  202. },
  203. "try": {
  204. token: TRY,
  205. },
  206. "this": {
  207. token: THIS,
  208. },
  209. "else": {
  210. token: ELSE,
  211. },
  212. "case": {
  213. token: CASE,
  214. },
  215. "void": {
  216. token: VOID,
  217. },
  218. "with": {
  219. token: WITH,
  220. },
  221. "while": {
  222. token: WHILE,
  223. },
  224. "break": {
  225. token: BREAK,
  226. },
  227. "catch": {
  228. token: CATCH,
  229. },
  230. "throw": {
  231. token: THROW,
  232. },
  233. "return": {
  234. token: RETURN,
  235. },
  236. "typeof": {
  237. token: TYPEOF,
  238. },
  239. "delete": {
  240. token: DELETE,
  241. },
  242. "switch": {
  243. token: SWITCH,
  244. },
  245. "default": {
  246. token: DEFAULT,
  247. },
  248. "finally": {
  249. token: FINALLY,
  250. },
  251. "function": {
  252. token: FUNCTION,
  253. },
  254. "continue": {
  255. token: CONTINUE,
  256. },
  257. "debugger": {
  258. token: DEBUGGER,
  259. },
  260. "instanceof": {
  261. token: INSTANCEOF,
  262. },
  263. "const": {
  264. token: KEYWORD,
  265. futureKeyword: true,
  266. },
  267. "class": {
  268. token: KEYWORD,
  269. futureKeyword: true,
  270. },
  271. "enum": {
  272. token: KEYWORD,
  273. futureKeyword: true,
  274. },
  275. "export": {
  276. token: KEYWORD,
  277. futureKeyword: true,
  278. },
  279. "extends": {
  280. token: KEYWORD,
  281. futureKeyword: true,
  282. },
  283. "import": {
  284. token: KEYWORD,
  285. futureKeyword: true,
  286. },
  287. "super": {
  288. token: KEYWORD,
  289. futureKeyword: true,
  290. },
  291. "implements": {
  292. token: KEYWORD,
  293. futureKeyword: true,
  294. strict: true,
  295. },
  296. "interface": {
  297. token: KEYWORD,
  298. futureKeyword: true,
  299. strict: true,
  300. },
  301. "let": {
  302. token: KEYWORD,
  303. futureKeyword: true,
  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. }