Package parser

import "go/parser"
Overview
Index
Examples

Overview ▾

包解析器为Go源文件实现了一个解析器. 输入可以以多种形式提供(请参阅各种Parse *函数); 输出是代表Go源代码的抽象语法树(AST). 通过Parse *函数之一调用解析器.

解析器接受比Go规范在语法上允许的语言更大的语言,以简化操作并提高存在语法错误时的鲁棒性. 例如,在方法声明中,接收方被视为普通参数列表,因此可能包含多个条目,而规范仅允许一个条目. 因此,AST(ast.FuncDecl.Recv)字段中的相应字段不限于一个条目.

func ParseDir

func ParseDir(fset *token.FileSet, path string, filter func(os.FileInfo) bool, mode Mode) (pkgs map[string]*ast.Package, first error)

ParseDir在路径指定的目录中对名称以" .go"结尾的所有文件调用ParseFile,并返回包名称->包AST的映射,其中找到了所有包.

如果filter!= nil,则仅考虑通过os.FileInfo条目(通过" .go"结尾)的文件. 模式位将不变地传递给ParseFile. 位置信息记录在fset中,不能为nil.

如果无法读取目录,则返回nil映射和相应的错误. 如果发生解析错误,则返回非零但不完整的映射和遇到的第一个错误.

func ParseExpr

func ParseExpr(x string) (ast.Expr, error)

ParseExpr是用于获取表达式x的AST的便捷函数. AST中记录的位置信息是不确定的. 错误消息中使用的文件名是空字符串.

func ParseExprFrom 1.5

func ParseExprFrom(fset *token.FileSet, filename string, src interface{}, mode Mode) (ast.Expr, error)

ParseExprFrom是用于解析表达式的便捷函数. 参数的含义与ParseFile的含义相同,但是源必须是有效的Go(类型或值)表达式. 具体来说,fset不能为零.

func ParseFile

func ParseFile(fset *token.FileSet, filename string, src interface{}, mode Mode) (f *ast.File, err error)

ParseFile解析单个Go源文件的源代码,并返回相应的ast.File节点. 可以通过源文件的文件名或src参数提供源代码.

如果src!= nil,则ParseFile从src解析源,并且仅在记录位置信息时使用文件名. src参数的参数类型必须为字符串,[] byte或io.Reader. 如果src == nil,则ParseFile解析文件名指定的文件.

mode参数控制已解析的源文本的数量以及其他可选的解析器功能. 位置信息记录在文件集fset中,不能为nil.

如果无法读取源,则返回的AST为零,并且错误指示特定的失败. 如果读取了源但发现语法错误,则结果是部分AST(带有ast.Bad *节点表示错误源代码的​​片段). 通过scanner.ErrorList返回多个错误,该错误按文件位置排序.

Example

"fmt"
"time"

type Mode

模式值是一组标志(或0). 它们控制已解析的源代码的数量以及其他可选的解析器功能.

type Mode uint
const (
    PackageClauseOnly Mode             = 1 << iota // stop parsing after package clause
    ImportsOnly                                    // stop parsing after import declarations
    ParseComments                                  // parse comments and add them to AST
    Trace                                          // print a trace of parsed productions
    DeclarationErrors                              // report declaration errors
    SpuriousErrors                                 // same as AllErrors, for backward-compatibility
    AllErrors         = SpuriousErrors             // report all errors (not just the first 10 on different lines)
)

by  ICOPY.SITE