go/token(令牌)
Package token
import "go/token"
- Overview
- Index
概观
Package标记定义代表Go编程语言的词法标记的常量和标记(打印,谓词)的基本操作。
索引
- Constants
- type File
- func (f *File) AddLine(offset int)
- func (f *File) AddLineInfo(offset int, filename string, line int)
- func (f *File) Base() int
- func (f *File) Line(p Pos) int
- func (f *File) LineCount() int
- func (f *File) MergeLine(line int)
- func (f *File) Name() string
- func (f *File) Offset(p Pos) int
- func (f *File) Pos(offset int) Pos
- func (f *File) Position(p Pos) (pos Position)
- func (f *File) PositionFor(p Pos, adjusted bool) (pos Position)
- func (f *File) SetLines(lines []int) bool
- func (f *File) SetLinesForContent(content []byte)
- func (f *File) Size() int
- type FileSet
- func NewFileSet() *FileSet
- func (s *FileSet) AddFile(filename string, base, size int) *File
- func (s *FileSet) Base() int
- func (s *FileSet) File(p Pos) (f *File)
- func (s *FileSet) Iterate(f func(*File) bool)
- func (s *FileSet) Position(p Pos) (pos Position)
- func (s *FileSet) PositionFor(p Pos, adjusted bool) (pos Position)
- func (s *FileSet) Read(decode func(interface{}) error) error
- func (s *FileSet) Write(encode func(interface{}) error) error
- type Pos
- func (p Pos) IsValid() bool
- type Position
- func (pos *Position) IsValid() bool
- func (pos Position) String() string
- type Token
- func Lookup(ident string) Token
- func (tok Token) IsKeyword() bool
- func (tok Token) IsLiteral() bool
- func (tok Token) IsOperator() bool
- func (op Token) Precedence() int
- func (tok Token) String() string
包文件
position.go serialize.go token.go
常量
一组基于优先级的表达式分析的常量。非运营商的优先级最低,其次是运营商从优先级1开始直到一元运营商。最高优先级用作选择器,索引和其他运算符和分隔符令牌的“全部捕捉”优先级。
const (
LowestPrec = 0 // non-operators
UnaryPrec = 6
HighestPrec = 7
)
type File(显示源代码)
文件是属于FileSet的文件的句柄。文件具有名称,大小和行偏移量表。
type File struct {
// contains filtered or unexported fields
}
func (*File) AddLine(显示源代码)
func (f *File) AddLine(offset int)
AddLine为新行添加行偏移量。行偏移量必须大于前一行的偏移量并小于文件大小; 否则行偏移将被忽略。
func (*File) AddLineInfo(显示源代码)
func (f *File) AddLineInfo(offset int, filename string, line int)
AddLineInfo为给定的文件偏移量添加替代文件和行号信息。偏移量必须大于先前添加的替代线信息的偏移量并小于文件大小; 否则信息被忽略。
AddLineInfo通常用于注册//行文件名的替代位置信息:源文件中的行注释。
func (*File) Base(显示源代码)
func (f *File) Base() int
Base返回使用AddFile注册的文件f的基本偏移量。
func (*File) Line(显示源代码)
func (f *File) Line(p Pos) int
Line返回给定文件位置p的行号; p必须是该文件或NoPos中的Pos值。
func (*File) LineCount(显示源代码)
func (f *File) LineCount() int
LineCount返回文件f中的行数。
func (*File) MergeLine(显示源代码)
func (f *File) MergeLine(line int)
MergeLine将一行与以下行合并。它类似于用一个空格替换行尾的换行符(以不改变剩余的偏移量)。要获得行号,请参考例如Position.Line。如果给出无效的行号,MergeLine将会发生混乱。
func (*File) Name(显示源代码)
func (f *File) Name() string
Name返回使用AddFile注册的文件f的文件名。
func (*File) Offset(显示源代码)
func (f *File) Offset(p Pos) int
偏移返回给定文件位置p的偏移量; p必须是该文件中的有效Pos值。f.Offset(f.Pos(offset))== offset。
func (*File) Pos(显示源代码)
func (f *File) Pos(offset int) Pos
Pos返回给定文件偏移量的Pos值; 偏移量必须<= f.Size()。f.Pos(f.Offset(p))== p。
func (*File) Position(显示源代码)
func (f *File) Position(p Pos) (pos Position)
位置返回给定文件位置p的位置值。调用f.Position(p)等效于调用f.PositionFor(p,true)。
func (*File) PositionFor(显示源代码)
func (f *File) PositionFor(p Pos, adjusted bool) (pos Position)
PositionFor返回给定文件位置p的Position值。如果调整已设置,则可以通过改变位置//行注释来调整位置; 否则这些评论被忽略。p必须是f或NoPos中的Pos值。
func (*File) SetLines(显示源代码)
func (f *File) SetLines(lines []int) bool
SetLines设置文件的行偏移量并报告它是否成功。线偏移量是每行第一个字符的偏移量; 例如对于内容“ab \ nc \ n”,行偏移是{0,3}。一个空文件有一个空行偏移表。每行偏移量必须大于前一行的偏移量并小于文件大小; 否则SetLines失败并返回false。在SetLines返回之后,调用者不得改变提供的切片。
func (*File) SetLinesForContent(显示源代码)
func (f *File) SetLinesForContent(content []byte)
SetLinesForContent设置给定文件内容的行偏移量。它忽略了改变位置的//行注释。
func (*File) Size(显示源代码)
func (f *File) Size() int
Size返回使用AddFile注册的文件f的大小。
type FileSet(显示源代码)
FileSet代表一组源文件。文件集的方法是同步的; 多个goroutines可以同时调用它们。
type FileSet struct {
// contains filtered or unexported fields
}
func NewFileSet(显示源代码)
func NewFileSet() *FileSet
NewFileSet创建一个新的文件集。
func (*FileSet) AddFile(显示源代码)
func (s *FileSet) AddFile(filename string, base, size int) *File
AddFile将具有给定文件名,基础偏移量和文件大小的新文件添加到文件集s并返回文件。多个文件可能具有相同的名称。基本偏移不得小于FileSet的Base(),并且大小不能是负数。作为一种特殊情况,如果提供了否定基数,则将使用FileSet的Base()的当前值。
添加文件将把文件集的Base()值设置为base + size + 1作为下一个文件的最小基值。以下关系存在于给定文件偏移量的Pos值p之间:
int(p) = base + offs
在范围0,大小和因此在范围基地,基地+大小的偏差。为了方便起见,File.Pos可用于从文件偏移量创建文件特定的位置值。
func (*FileSet) Base(显示源代码)
func (s *FileSet) Base() int
Base返回添加下一个文件时必须提供给AddFile的最小基本偏移量。
func (*FileSet) File(显示源代码)
func (s *FileSet) File(p Pos) (f *File)
文件返回包含位置p的文件。如果没有找到这样的文件(例如p == NoPos),结果为零。
func (*FileSet) Iterate(显示源代码)
func (s *FileSet) Iterate(f func(*File) bool)
按照添加的顺序迭代调用f来获取文件集中的文件,直到f返回false。
func (*FileSet) Position(显示源代码)
func (s *FileSet) Position(p Pos) (pos Position)
位置将文件集中的Pos p转换为Position值。调用s.Position(p)等效于调用s.PositionFor(p,true)。
func (*FileSet) PositionFor(显示源代码)
func (s *FileSet) PositionFor(p Pos, adjusted bool) (pos Position)
PositionFor将文件集中的Pos p转换为Position值。如果调整已设置,则可以通过改变位置//行注释来调整位置; 否则这些评论被忽略。p必须是s或NoPos中的Pos值。
func (*FileSet) Read(显示源代码)
func (s *FileSet) Read(decode func(interface{}) error) error
读取调用解码以将一个文件集反序列化为s; s不能为零。
func (*FileSet) Write(显示源代码)
func (s *FileSet) Write(encode func(interface{}) error) error
编写调用编码以序列化文件集。
type Pos(显示源代码)
Pos是文件集中源位置的紧凑编码。它可以转换为一个更方便,但更大的表示的位置。
给定文件的Pos值是基本范围base + size中的数字,其中base和size是通过AddFile将文件添加到文件集时指定的。
要为特定源偏移量创建Pos值(以字节为单位),请首先使用FileSet.AddFile将相应文件添加到当前文件集,然后调用该文件的File.Pos(offset)。给定特定文件集fset的Pos值p,通过调用fset.Position(p)获得相应的Position值。
可以将Pos值直接与通常的比较运算符进行比较:如果两个Pos值p和q在同一个文件中,则比较p和q就相当于比较各个源文件偏移量。如果p和q在不同的文件中,如果p所隐含的文件被添加到q所隐含的文件之前的相应文件集中,则p <q为真。
type Pos int
Pos的零值是NoPos; 没有与之关联的文件和行信息,并且NoPos.IsValid()为false。NoPos总是小于任何其他Pos值。NoPos的相应位置值是位置的零值。
const NoPos Pos = 0
func (Pos) IsValid(显示源代码)
func (p Pos) IsValid() bool
IsValid报告该位置是否有效。
type Position(显示源代码)
位置描述包括文件,行和列位置的任意源位置。如果行号> 0,则位置有效。
type Position struct {
Filename string // filename, if any
Offset int // offset, starting at 0
Line int // line number, starting at 1
Column int // column number, starting at 1 (byte count)
}
func (*Position) IsValid(显示源代码)
func (pos *Position) IsValid() bool
IsValid报告该位置是否有效。
func (Position) String(显示源代码)
func (pos Position) String() string
字符串以几种形式之一返回一个字符串:
file:line:column valid position with file name
line:column valid position without file name
file invalid position with file name
- invalid position without file name
type Token(显示源代码)
令牌是Go编程语言的一组词汇标记。
type Token int
令牌列表。
const (
// Special tokens
ILLEGAL Token = iota
EOF
COMMENT
// Identifiers and basic type literals
// (these tokens stand for classes of literals)
IDENT // main
INT // 12345
FLOAT // 123.45
IMAG // 123.45i
CHAR // 'a'
STRING // "abc"
// Operators and delimiters
ADD // +
SUB // -
MUL // *
QUO // /
REM // %
AND // &
OR // |
XOR // ^
SHL // <<
SHR // >>
AND_NOT // &^
ADD_ASSIGN // +=
SUB_ASSIGN // -=
MUL_ASSIGN // *=
QUO_ASSIGN // /=
REM_ASSIGN // %=
AND_ASSIGN // &=
OR_ASSIGN // |=
XOR_ASSIGN // ^=
SHL_ASSIGN // <<=
SHR_ASSIGN // >>=
AND_NOT_ASSIGN // &^=
LAND // &&
LOR // ||
ARROW // <-
INC // ++
DEC // --
EQL // ==
LSS // <
GTR // >
ASSIGN // =
NOT // !
NEQ // !=
LEQ // <=
GEQ // >=
DEFINE // :=
ELLIPSIS // ...
LPAREN // (
LBRACK // [
LBRACE // {
COMMA // ,
PERIOD // .
RPAREN // )
RBRACK // ]
RBRACE // }
SEMICOLON // ;
COLON // :
// Keywords
BREAK
CASE
CHAN
CONST
CONTINUE
DEFAULT
DEFER
ELSE
FALLTHROUGH
FOR
FUNC
GO
GOTO
IF
IMPORT
INTERFACE
MAP
PACKAGE
RANGE
RETURN
SELECT
STRUCT
SWITCH
TYPE
VAR
)
func Lookup(显示源代码)
func Lookup(ident string) Token
Lookup会将标识符映射到其关键字标记或IDENT(如果不是关键字)。
func (Token) IsKeyword(显示源代码)
func (tok Token) IsKeyword() bool
IsKeyword对与关键字相对应的标记返回true; 否则返回false。
func (Token) IsLiteral(显示源代码)
func (tok Token) IsLiteral() bool
对于与标识符和基本类型文字相对应的标记,IsLiteral返回true; 否则返回false。
func (Token) IsOperator(显示源代码)
func (tok Token) IsOperator() bool
IsOperator对运算符和分隔符对应的令牌返回true; 否则返回false。
func (Token) Precedence(显示源代码)
func (op Token) Precedence() int
优先级返回二元运算符op的运算符优先级。如果op不是二元运算符,则结果为LowestPrecedence。
func (Token) String(显示源代码)
func (tok Token) String() string
字符串返回对应于令牌tok的字符串。对于运算符,分隔符和关键字,字符串是实际的令牌字符序列(例如,对于令牌ADD,字符串是“+”)。对于所有其他标记,字符串对应于标记常量名称(例如对于标记IDENT,字符串是“IDENT”)。