token_const.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  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. "do": {
  189. token: DO,
  190. },
  191. "var": {
  192. token: VAR,
  193. },
  194. "for": {
  195. token: FOR,
  196. },
  197. "new": {
  198. token: NEW,
  199. },
  200. "try": {
  201. token: TRY,
  202. },
  203. "this": {
  204. token: THIS,
  205. },
  206. "else": {
  207. token: ELSE,
  208. },
  209. "case": {
  210. token: CASE,
  211. },
  212. "void": {
  213. token: VOID,
  214. },
  215. "with": {
  216. token: WITH,
  217. },
  218. "while": {
  219. token: WHILE,
  220. },
  221. "break": {
  222. token: BREAK,
  223. },
  224. "catch": {
  225. token: CATCH,
  226. },
  227. "throw": {
  228. token: THROW,
  229. },
  230. "return": {
  231. token: RETURN,
  232. },
  233. "typeof": {
  234. token: TYPEOF,
  235. },
  236. "delete": {
  237. token: DELETE,
  238. },
  239. "switch": {
  240. token: SWITCH,
  241. },
  242. "default": {
  243. token: DEFAULT,
  244. },
  245. "finally": {
  246. token: FINALLY,
  247. },
  248. "function": {
  249. token: FUNCTION,
  250. },
  251. "continue": {
  252. token: CONTINUE,
  253. },
  254. "debugger": {
  255. token: DEBUGGER,
  256. },
  257. "instanceof": {
  258. token: INSTANCEOF,
  259. },
  260. "const": {
  261. token: KEYWORD,
  262. futureKeyword: true,
  263. },
  264. "class": {
  265. token: KEYWORD,
  266. futureKeyword: true,
  267. },
  268. "enum": {
  269. token: KEYWORD,
  270. futureKeyword: true,
  271. },
  272. "export": {
  273. token: KEYWORD,
  274. futureKeyword: true,
  275. },
  276. "extends": {
  277. token: KEYWORD,
  278. futureKeyword: true,
  279. },
  280. "import": {
  281. token: KEYWORD,
  282. futureKeyword: true,
  283. },
  284. "super": {
  285. token: KEYWORD,
  286. futureKeyword: true,
  287. },
  288. "implements": {
  289. token: KEYWORD,
  290. futureKeyword: true,
  291. strict: true,
  292. },
  293. "interface": {
  294. token: KEYWORD,
  295. futureKeyword: true,
  296. strict: true,
  297. },
  298. "let": {
  299. token: KEYWORD,
  300. futureKeyword: true,
  301. strict: true,
  302. },
  303. "package": {
  304. token: KEYWORD,
  305. futureKeyword: true,
  306. strict: true,
  307. },
  308. "private": {
  309. token: KEYWORD,
  310. futureKeyword: true,
  311. strict: true,
  312. },
  313. "protected": {
  314. token: KEYWORD,
  315. futureKeyword: true,
  316. strict: true,
  317. },
  318. "public": {
  319. token: KEYWORD,
  320. futureKeyword: true,
  321. strict: true,
  322. },
  323. "static": {
  324. token: KEYWORD,
  325. futureKeyword: true,
  326. strict: true,
  327. },
  328. }