首页
学习
活动
专区
工具
TVP
发布

go/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

包文件

常量

一组基于优先级的表达式分析的常量。非运营商的优先级最低,其次是运营商从优先级1开始直到一元运营商。最高优先级用作选择器,索引和其他运算符和分隔符令牌的“全部捕捉”优先级。

const (
        LowestPrec  = 0 // non-operators
        UnaryPrec   = 6
        HighestPrec = 7
)

文件是属于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的大小。

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

编写调用编码以序列化文件集。

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报告该位置是否有效。

位置描述包括文件,行和列位置的任意源位置。如果行号> 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

令牌是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 (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”)。

扫码关注腾讯云开发者

领取腾讯云代金券