token_const.go 7.0 KB

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