©
This document uses PHP Chinese website manual Release
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)
文件是属于FileSet的文件的句柄。文件具有名称,大小和行偏移量表。
type File struct { // contains filtered or unexported fields}
func (f *File) AddLine(offset int)
AddLine为新行添加行偏移量。行偏移量必须大于前一行的偏移量并小于文件大小; 否则行偏移将被忽略。
func (f *File) AddLineInfo(offset int, filename string, line int)
AddLineInfo为给定的文件偏移量添加替代文件和行号信息。偏移量必须大于先前添加的替代线信息的偏移量并小于文件大小; 否则信息被忽略。
AddLineInfo通常用于注册//行文件名的替代位置信息:源文件中的行注释。
func (f *File) Base() int
Base返回使用AddFile注册的文件f的基本偏移量。
func (f *File) Line(p Pos) int
Line返回给定文件位置p的行号; p必须是该文件或NoPos中的Pos值。
func (f *File) LineCount() int
LineCount返回文件f中的行数。
func (f *File) MergeLine(line int)
MergeLine将一行与以下行合并。它类似于用一个空格替换行尾的换行符(以不改变剩余的偏移量)。要获得行号,请参考例如Position.Line。如果给出无效的行号,MergeLine将会发生混乱。
func (f *File) Name() string
Name返回使用AddFile注册的文件f的文件名。
func (f *File) Offset(p Pos) int
偏移返回给定文件位置p的偏移量; p必须是该文件中的有效Pos值。f.Offset(f.Pos(offset))== offset。
func (f *File) Pos(offset int) Pos
Pos返回给定文件偏移量的Pos值; 偏移量必须<= f.Size()。f.Pos(f.Offset(p))== p。
func (f *File) Position(p Pos) (pos Position)
位置返回给定文件位置p的位置值。调用f.Position(p)等效于调用f.PositionFor(p,true)。
func (f *File) PositionFor(p Pos, adjusted bool) (pos Position)
PositionFor返回给定文件位置p的Position值。如果调整已设置,则可以通过改变位置//行注释来调整位置; 否则这些评论被忽略。p必须是f或NoPos中的Pos值。
func (f *File) SetLines(lines []int) bool
SetLines设置文件的行偏移量并报告它是否成功。线偏移量是每行第一个字符的偏移量; 例如对于内容“ab \ nc \ n”,行偏移是{0,3}。一个空文件有一个空行偏移表。每行偏移量必须大于前一行的偏移量并小于文件大小; 否则SetLines失败并返回false。在SetLines返回之后,调用者不得改变提供的切片。
func (f *File) SetLinesForContent(content []byte)
SetLinesForContent设置给定文件内容的行偏移量。它忽略了改变位置的//行注释。
func (f *File) Size() int
Size返回使用AddFile注册的文件f的大小。
FileSet代表一组源文件。文件集的方法是同步的; 多个goroutines可以同时调用它们。
type FileSet struct { // contains filtered or unexported fields}
func NewFileSet() *FileSet
NewFileSet创建一个新的文件集。
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 (s *FileSet) Base() int
Base返回添加下一个文件时必须提供给AddFile的最小基本偏移量。
func (s *FileSet) File(p Pos) (f *File)
文件返回包含位置p的文件。如果没有找到这样的文件(例如p == NoPos),结果为零。
func (s *FileSet) Iterate(f func(*File) bool)
按照添加的顺序迭代调用f来获取文件集中的文件,直到f返回false。
func (s *FileSet) Position(p Pos) (pos Position)
位置将文件集中的Pos p转换为Position值。调用s.Position(p)等效于调用s.PositionFor(p,true)。
func (s *FileSet) PositionFor(p Pos, adjusted bool) (pos Position)
PositionFor将文件集中的Pos p转换为Position值。如果调整已设置,则可以通过改变位置//行注释来调整位置; 否则这些评论被忽略。p必须是s或NoPos中的Pos值。
func (s *FileSet) Read(decode func(interface{}) error) error
读取调用解码以将一个文件集反序列化为s; s不能为零。
func (s *FileSet) Write(encode func(interface{}) error) error
编写调用编码以序列化文件集。
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 (p Pos) IsValid() bool
IsValid报告该位置是否有效。
位置描述包括文件,行和列位置的任意源位置。如果行号> 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 (pos *Position) IsValid() bool
IsValid报告该位置是否有效。
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
令牌是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(ident string) Token
Lookup会将标识符映射到其关键字标记或IDENT(如果不是关键字)。
func (tok Token) IsKeyword() bool
IsKeyword对与关键字相对应的标记返回true; 否则返回false。
func (tok Token) IsLiteral() bool
对于与标识符和基本类型文字相对应的标记,IsLiteral返回true; 否则返回false。
func (tok Token) IsOperator() bool
IsOperator对运算符和分隔符对应的令牌返回true; 否则返回false。
func (op Token) Precedence() int
优先级返回二元运算符op的运算符优先级。如果op不是二元运算符,则结果为LowestPrecedence。
func (tok Token) String() string
字符串返回对应于令牌tok的字符串。对于运算符,分隔符和关键字,字符串是实际的令牌字符序列(例如,对于令牌ADD,字符串是“+”)。对于所有其他标记,字符串对应于标记常量名称(例如对于标记IDENT,字符串是“IDENT”)。