// Copyright 2016 The Go Authors. All rights reserved.
|
// Use of this source code is governed by a BSD-style
|
// license that can be found in the LICENSE file.
|
|
package syntax
|
|
type token uint
|
|
//go:generate stringer -type token -linecomment
|
|
const (
|
_ token = iota
|
_EOF // EOF
|
|
// names and literals
|
_Name // name
|
_Literal // literal
|
|
// operators and operations
|
// _Operator is excluding '*' (_Star)
|
_Operator // op
|
_AssignOp // op=
|
_IncOp // opop
|
_Assign // =
|
_Define // :=
|
_Arrow // <-
|
_Star // *
|
|
// delimiters
|
_Lparen // (
|
_Lbrack // [
|
_Lbrace // {
|
_Rparen // )
|
_Rbrack // ]
|
_Rbrace // }
|
_Comma // ,
|
_Semi // ;
|
_Colon // :
|
_Dot // .
|
_DotDotDot // ...
|
|
// keywords
|
_Break // break
|
_Case // case
|
_Chan // chan
|
_Const // const
|
_Continue // continue
|
_Default // default
|
_Defer // defer
|
_Else // else
|
_Fallthrough // fallthrough
|
_For // for
|
_Func // func
|
_Go // go
|
_Goto // goto
|
_If // if
|
_Import // import
|
_Interface // interface
|
_Map // map
|
_Package // package
|
_Range // range
|
_Return // return
|
_Select // select
|
_Struct // struct
|
_Switch // switch
|
_Type // type
|
_Var // var
|
|
// empty line comment to exclude it from .String
|
tokenCount //
|
)
|
|
const (
|
// for BranchStmt
|
Break = _Break
|
Continue = _Continue
|
Fallthrough = _Fallthrough
|
Goto = _Goto
|
|
// for CallStmt
|
Go = _Go
|
Defer = _Defer
|
)
|
|
// Make sure we have at most 64 tokens so we can use them in a set.
|
const _ uint64 = 1 << (tokenCount - 1)
|
|
// contains reports whether tok is in tokset.
|
func contains(tokset uint64, tok token) bool {
|
return tokset&(1<<tok) != 0
|
}
|
|
type LitKind uint
|
|
const (
|
IntLit LitKind = iota
|
FloatLit
|
ImagLit
|
RuneLit
|
StringLit
|
)
|
|
type Operator uint
|
|
//go:generate stringer -type Operator -linecomment
|
|
const (
|
_ Operator = iota
|
|
// Def is the : in :=
|
Def // :
|
Not // !
|
Recv // <-
|
|
// precOrOr
|
OrOr // ||
|
|
// precAndAnd
|
AndAnd // &&
|
|
// precCmp
|
Eql // ==
|
Neq // !=
|
Lss // <
|
Leq // <=
|
Gtr // >
|
Geq // >=
|
|
// precAdd
|
Add // +
|
Sub // -
|
Or // |
|
Xor // ^
|
|
// precMul
|
Mul // *
|
Div // /
|
Rem // %
|
And // &
|
AndNot // &^
|
Shl // <<
|
Shr // >>
|
)
|
|
// Operator precedences
|
const (
|
_ = iota
|
precOrOr
|
precAndAnd
|
precCmp
|
precAdd
|
precMul
|
)
|