Package token

import "go/token"
Overview
Index
Examples

Overview ▾

包标记定义代表Go编程语言的词法标记的常量以及对标记的基本操作(打印,谓词).

示例(RetrievePositionInfo)

main.go:3:1: import
main.go:5:1: import
main.go:1:5[main.go:8:1]: type
main.go:3:1[main.go:10:1]: const
fake.go:42:11[main.go:13:1]: func
fake.go:7:9[main.go:17:14]: func

Index ▾

Constants
func IsExported(name string) bool
func IsIdentifier(name string) bool
func IsKeyword(name string) bool
type File
    func (f *File) AddLine(offset int)
    func (f *File) AddLineColumnInfo(offset int, filename string, line, column 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) LineStart(line int) Pos
    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

Examples

Package (RetrievePositionInfo)

Package files

position.go serialize.go token.go

Constants

一组用于基于优先级的表达式解析的常量. 非运算符的优先级最低,其后依次是从优先级1开始到一元运算符的运算符. 最高优先级用作选择器,索引以及其他运算符和定界符标记的"包罗万象"优先级.

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

func IsExported 1.13

func IsExported(name string) bool

IsExported报告名称是否以大写字母开头.

func IsIdentifier 1.13

func IsIdentifier(name string) bool

IsIdentifier报告名称是否为Go标识符,即由字母,数字和下划线组成的非空字符串,其中第一个字符不是数字. 关键字不是标识符.

func IsKeyword 1.13

func IsKeyword(name string) bool

IsKeyword报告名称是Go关键字,例如" func"或" return".

type File

文件是属于FileSet的文件的句柄. 文件具有名称,大小和行偏移量表.

type File struct {
    // contains filtered or unexported fields
}

func (*File) AddLine

func (f *File) AddLine(offset int)

AddLine为新行添加行偏移量. 行偏移量必须大于前一行的偏移量,并且小于文件大小; 否则,将忽略行偏移.

func (*File) AddLineColumnInfo 1.11

func (f *File) AddLineColumnInfo(offset int, filename string, line, column int)

AddLineColumnInfo添加给定文件偏移量的替代文件,行和列号信息. 偏移量必须大于先前添加的替代行信息的偏移量,并且小于文件大小; 否则,该信息将被忽略.

AddLineColumnInfo通常用于注册行指令的替代位置信息,例如// line filename:line:column.

func (*File) AddLineInfo

func (f *File) AddLineInfo(offset int, filename string, line int)

AddLineInfo类似于AddLineColumnInfo,具有column = 1参数. 这是为了实现Go 1.11之前的代码的向后兼容性.

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) LineStart 1.12

func (f *File) LineStart(line int) Pos

LineStart返回指定行的起点的Pos值. 它忽略使用AddLineColumnInfo设置的任何替代位置. 如果从1开始的行号无效,LineStart会发生混乱.

func (*File) MergeLine 1.2

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))==偏移量

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)

Position返回给定文件位置p的Position值. 调用f.Position(p)等效于调用f.PositionFor(p,true).

func (*File) PositionFor 1.4

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代表一组源文件. 文件集的方法是同步的; 多个goroutine可以同时调用它们.

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,size]范围内,因此p在[base,base + size]范围内. 为了方便起见,File.Pos可用于从文件偏移量创建文件特定的位置值.

func (*FileSet) Base

func (s *FileSet) Base() int

Base返回添加下一个文件时必须提供给AddFile的最小基本偏移量.

func (*FileSet) File

func (s *FileSet) File(p Pos) (f *File)

File返回包含位置p的文件. 如果找不到这样的文件(例如p == NoPos),则结果为nil.

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)

位置将文件集中的位置p转换为位置值. 调用s.Position(p)等效于调用s.PositionFor(p,true).

func (*FileSet) PositionFor 1.4

func (s *FileSet) PositionFor(p Pos, adjusted bool) (pos Position)

PositionFor将文件集中的Pos p转换为Position值. 如果设置了调整,则可以通过更改位置//注释来调整位置; 否则,这些评论将被忽略. p必须是s中的Pos值或NoPos.

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

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

type Pos

Pos是文件集中源位置的紧凑编码. 可以将其转换为位置,以提供更方便但更大的表示形式.

给定文件的Pos值是[base,base + size]范围内的数字,其中在将文件添加到通过AddFile设置的文件中时指定了base和size.

要为特定的源偏移量(以字节为单位)创建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为true.

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
file:line           valid position with file name but no column (column == 0)
line:column         valid position without file name
line                valid position without file name and no column (column == 0)
file                invalid position with file name
-                   invalid position without file name

type Token

Token is the set of lexical tokens of the Go programming language.

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

查找将标识符映射到其关键字标记或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

String返回与令牌tok对应的字符串. 对于运算符,定界符和关键字,字符串是实际的令牌字符序列(例如,对于令牌ADD,字符串是" +"). 对于所有其他令牌,该字符串对应于令牌常量名称(例如,对于令牌IDENT,该字符串为" IDENT").

by  ICOPY.SITE