go tokens 源码

2022-07-15 浏览 (1295)

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
)

相关信息

go 源码目录

相关文章

go branches 源码

go dumper 源码

go dumper_test 源码

go error_test 源码

go nodes 源码

go nodes_test 源码

go operator_string 源码

go parser 源码

go parser_test 源码

go pos 源码

  • 所属分类: 后端技术
  • 本文标签: golang
  • 版权声明: 本文链接 https://seaxiang.com/blog/c0c07300796c42df95775dc989545f78