golang tokens 代码
文件路径:/src/cmd/compile/internal/syntax/tokens.go
/ 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 tokens.go
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 uint8
/ TODO(gri) With the 'i' (imaginary) suffix now permitted on integer
/ and floating-point numbers, having a single ImagLit does
/ not represent the literal kind well anymore. Remove it?
const (
IntLit LitKind = iota
FloatLit
ImagLit
RuneLit
StringLit
)
type Operator uint
/go:generate stringer -type Operator -linecomment tokens.go
const (
_ Operator = iota
/ Def is the : in :=
Def / :
Not / !
Recv / <-
Tilde / ~
/ 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
)