在线文档教程

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”)。