token_const.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  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. firstKeyword
  64. IF
  65. IN
  66. OF
  67. DO
  68. VAR
  69. LET
  70. FOR
  71. NEW
  72. TRY
  73. THIS
  74. ELSE
  75. CASE
  76. VOID
  77. WITH
  78. CONST
  79. WHILE
  80. BREAK
  81. CATCH
  82. THROW
  83. RETURN
  84. TYPEOF
  85. DELETE
  86. SWITCH
  87. DEFAULT
  88. FINALLY
  89. FUNCTION
  90. CONTINUE
  91. DEBUGGER
  92. INSTANCEOF
  93. lastKeyword
  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. IF: "if",
  156. IN: "in",
  157. OF: "of",
  158. DO: "do",
  159. VAR: "var",
  160. LET: "let",
  161. FOR: "for",
  162. NEW: "new",
  163. TRY: "try",
  164. THIS: "this",
  165. ELSE: "else",
  166. CASE: "case",
  167. VOID: "void",
  168. WITH: "with",
  169. CONST: "const",
  170. WHILE: "while",
  171. BREAK: "break",
  172. CATCH: "catch",
  173. THROW: "throw",
  174. RETURN: "return",
  175. TYPEOF: "typeof",
  176. DELETE: "delete",
  177. SWITCH: "switch",
  178. DEFAULT: "default",
  179. FINALLY: "finally",
  180. FUNCTION: "function",
  181. CONTINUE: "continue",
  182. DEBUGGER: "debugger",
  183. INSTANCEOF: "instanceof",
  184. }
  185. var keywordTable = map[string]_keyword{
  186. "if": {
  187. token: IF,
  188. },
  189. "in": {
  190. token: IN,
  191. },
  192. "do": {
  193. token: DO,
  194. },
  195. "var": {
  196. token: VAR,
  197. },
  198. "for": {
  199. token: FOR,
  200. },
  201. "new": {
  202. token: NEW,
  203. },
  204. "try": {
  205. token: TRY,
  206. },
  207. "this": {
  208. token: THIS,
  209. },
  210. "else": {
  211. token: ELSE,
  212. },
  213. "case": {
  214. token: CASE,
  215. },
  216. "void": {
  217. token: VOID,
  218. },
  219. "with": {
  220. token: WITH,
  221. },
  222. "while": {
  223. token: WHILE,
  224. },
  225. "break": {
  226. token: BREAK,
  227. },
  228. "catch": {
  229. token: CATCH,
  230. },
  231. "throw": {
  232. token: THROW,
  233. },
  234. "return": {
  235. token: RETURN,
  236. },
  237. "typeof": {
  238. token: TYPEOF,
  239. },
  240. "delete": {
  241. token: DELETE,
  242. },
  243. "switch": {
  244. token: SWITCH,
  245. },
  246. "default": {
  247. token: DEFAULT,
  248. },
  249. "finally": {
  250. token: FINALLY,
  251. },
  252. "function": {
  253. token: FUNCTION,
  254. },
  255. "continue": {
  256. token: CONTINUE,
  257. },
  258. "debugger": {
  259. token: DEBUGGER,
  260. },
  261. "instanceof": {
  262. token: INSTANCEOF,
  263. },
  264. "const": {
  265. token: CONST,
  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: LET,
  303. strict: true,
  304. },
  305. "package": {
  306. token: KEYWORD,
  307. futureKeyword: true,
  308. strict: true,
  309. },
  310. "private": {
  311. token: KEYWORD,
  312. futureKeyword: true,
  313. strict: true,
  314. },
  315. "protected": {
  316. token: KEYWORD,
  317. futureKeyword: true,
  318. strict: true,
  319. },
  320. "public": {
  321. token: KEYWORD,
  322. futureKeyword: true,
  323. strict: true,
  324. },
  325. "static": {
  326. token: KEYWORD,
  327. futureKeyword: true,
  328. strict: true,
  329. },
  330. }