123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- package js
- import "strconv"
- // OpPrec is the operator precedence
- type OpPrec int
- // OpPrec values.
- const (
- OpExpr OpPrec = iota // a,b
- OpAssign // a?b:c, yield x, ()=>x, async ()=>x, a=b, a+=b, ...
- OpCoalesce // a??b
- OpOr // a||b
- OpAnd // a&&b
- OpBitOr // a|b
- OpBitXor // a^b
- OpBitAnd // a&b
- OpEquals // a==b, a!=b, a===b, a!==b
- OpCompare // a<b, a>b, a<=b, a>=b, a instanceof b, a in b
- OpShift // a<<b, a>>b, a>>>b
- OpAdd // a+b, a-b
- OpMul // a*b, a/b, a%b
- OpExp // a**b
- OpUnary // ++x, --x, delete x, void x, typeof x, +x, -x, ~x, !x, await x
- OpUpdate // x++, x--
- OpLHS // CallExpr/OptChainExpr or NewExpr
- OpCall // a?.b, a(b), super(a), import(a)
- OpNew // new a
- OpMember // a[b], a.b, a`b`, super[x], super.x, new.target, import.meta, new a(b)
- OpPrimary // literal, function, class, parenthesized
- )
- func (prec OpPrec) String() string {
- switch prec {
- case OpExpr:
- return "OpExpr"
- case OpAssign:
- return "OpAssign"
- case OpCoalesce:
- return "OpCoalesce"
- case OpOr:
- return "OpOr"
- case OpAnd:
- return "OpAnd"
- case OpBitOr:
- return "OpBitOr"
- case OpBitXor:
- return "OpBitXor"
- case OpBitAnd:
- return "OpBitAnd"
- case OpEquals:
- return "OpEquals"
- case OpCompare:
- return "OpCompare"
- case OpShift:
- return "OpShift"
- case OpAdd:
- return "OAdd"
- case OpMul:
- return "OpMul"
- case OpExp:
- return "OpExp"
- case OpUnary:
- return "OpUnary"
- case OpUpdate:
- return "OpUpdate"
- case OpLHS:
- return "OpLHS"
- case OpCall:
- return "OpCall"
- case OpNew:
- return "OpNew"
- case OpMember:
- return "OpMember"
- case OpPrimary:
- return "OpPrimary"
- }
- return "Invalid(" + strconv.Itoa(int(prec)) + ")"
- }
- // Keywords is a map of reserved, strict, and other keywords
- var Keywords = map[string]TokenType{
- // reserved
- "await": AwaitToken,
- "break": BreakToken,
- "case": CaseToken,
- "catch": CatchToken,
- "class": ClassToken,
- "const": ConstToken,
- "continue": ContinueToken,
- "debugger": DebuggerToken,
- "default": DefaultToken,
- "delete": DeleteToken,
- "do": DoToken,
- "else": ElseToken,
- "enum": EnumToken,
- "export": ExportToken,
- "extends": ExtendsToken,
- "false": FalseToken,
- "finally": FinallyToken,
- "for": ForToken,
- "function": FunctionToken,
- "if": IfToken,
- "import": ImportToken,
- "in": InToken,
- "instanceof": InstanceofToken,
- "new": NewToken,
- "null": NullToken,
- "return": ReturnToken,
- "super": SuperToken,
- "switch": SwitchToken,
- "this": ThisToken,
- "throw": ThrowToken,
- "true": TrueToken,
- "try": TryToken,
- "typeof": TypeofToken,
- "var": VarToken,
- "void": VoidToken,
- "while": WhileToken,
- "with": WithToken,
- "yield": YieldToken,
- // strict mode
- "let": LetToken,
- "static": StaticToken,
- "implements": ImplementsToken,
- "interface": InterfaceToken,
- "package": PackageToken,
- "private": PrivateToken,
- "protected": ProtectedToken,
- "public": PublicToken,
- // extra
- "as": AsToken,
- "async": AsyncToken,
- "from": FromToken,
- "get": GetToken,
- "meta": MetaToken,
- "of": OfToken,
- "set": SetToken,
- "target": TargetToken,
- }
|