table.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package js
  2. import "strconv"
  3. // OpPrec is the operator precedence
  4. type OpPrec int
  5. // OpPrec values.
  6. const (
  7. OpExpr OpPrec = iota // a,b
  8. OpAssign // a?b:c, yield x, ()=>x, async ()=>x, a=b, a+=b, ...
  9. OpCoalesce // a??b
  10. OpOr // a||b
  11. OpAnd // a&&b
  12. OpBitOr // a|b
  13. OpBitXor // a^b
  14. OpBitAnd // a&b
  15. OpEquals // a==b, a!=b, a===b, a!==b
  16. OpCompare // a<b, a>b, a<=b, a>=b, a instanceof b, a in b
  17. OpShift // a<<b, a>>b, a>>>b
  18. OpAdd // a+b, a-b
  19. OpMul // a*b, a/b, a%b
  20. OpExp // a**b
  21. OpUnary // ++x, --x, delete x, void x, typeof x, +x, -x, ~x, !x, await x
  22. OpUpdate // x++, x--
  23. OpLHS // CallExpr/OptChainExpr or NewExpr
  24. OpCall // a?.b, a(b), super(a), import(a)
  25. OpNew // new a
  26. OpMember // a[b], a.b, a`b`, super[x], super.x, new.target, import.meta, new a(b)
  27. OpPrimary // literal, function, class, parenthesized
  28. )
  29. func (prec OpPrec) String() string {
  30. switch prec {
  31. case OpExpr:
  32. return "OpExpr"
  33. case OpAssign:
  34. return "OpAssign"
  35. case OpCoalesce:
  36. return "OpCoalesce"
  37. case OpOr:
  38. return "OpOr"
  39. case OpAnd:
  40. return "OpAnd"
  41. case OpBitOr:
  42. return "OpBitOr"
  43. case OpBitXor:
  44. return "OpBitXor"
  45. case OpBitAnd:
  46. return "OpBitAnd"
  47. case OpEquals:
  48. return "OpEquals"
  49. case OpCompare:
  50. return "OpCompare"
  51. case OpShift:
  52. return "OpShift"
  53. case OpAdd:
  54. return "OAdd"
  55. case OpMul:
  56. return "OpMul"
  57. case OpExp:
  58. return "OpExp"
  59. case OpUnary:
  60. return "OpUnary"
  61. case OpUpdate:
  62. return "OpUpdate"
  63. case OpLHS:
  64. return "OpLHS"
  65. case OpCall:
  66. return "OpCall"
  67. case OpNew:
  68. return "OpNew"
  69. case OpMember:
  70. return "OpMember"
  71. case OpPrimary:
  72. return "OpPrimary"
  73. }
  74. return "Invalid(" + strconv.Itoa(int(prec)) + ")"
  75. }
  76. // Keywords is a map of reserved, strict, and other keywords
  77. var Keywords = map[string]TokenType{
  78. // reserved
  79. "await": AwaitToken,
  80. "break": BreakToken,
  81. "case": CaseToken,
  82. "catch": CatchToken,
  83. "class": ClassToken,
  84. "const": ConstToken,
  85. "continue": ContinueToken,
  86. "debugger": DebuggerToken,
  87. "default": DefaultToken,
  88. "delete": DeleteToken,
  89. "do": DoToken,
  90. "else": ElseToken,
  91. "enum": EnumToken,
  92. "export": ExportToken,
  93. "extends": ExtendsToken,
  94. "false": FalseToken,
  95. "finally": FinallyToken,
  96. "for": ForToken,
  97. "function": FunctionToken,
  98. "if": IfToken,
  99. "import": ImportToken,
  100. "in": InToken,
  101. "instanceof": InstanceofToken,
  102. "new": NewToken,
  103. "null": NullToken,
  104. "return": ReturnToken,
  105. "super": SuperToken,
  106. "switch": SwitchToken,
  107. "this": ThisToken,
  108. "throw": ThrowToken,
  109. "true": TrueToken,
  110. "try": TryToken,
  111. "typeof": TypeofToken,
  112. "var": VarToken,
  113. "void": VoidToken,
  114. "while": WhileToken,
  115. "with": WithToken,
  116. "yield": YieldToken,
  117. // strict mode
  118. "let": LetToken,
  119. "static": StaticToken,
  120. "implements": ImplementsToken,
  121. "interface": InterfaceToken,
  122. "package": PackageToken,
  123. "private": PrivateToken,
  124. "protected": ProtectedToken,
  125. "public": PublicToken,
  126. // extra
  127. "as": AsToken,
  128. "async": AsyncToken,
  129. "from": FromToken,
  130. "get": GetToken,
  131. "meta": MetaToken,
  132. "of": OfToken,
  133. "set": SetToken,
  134. "target": TargetToken,
  135. }