golang AST语法树解析
package main
import (
"fmt"
"go/ast"
"go/parser"
"go/token"
)
func main() {
// 代码字符串
code := `package main
import "fmt"
func main() {
fmt.Println("Hello, AST!")
}`
// 解析代码得到语法树
fset := token.NewFileSet() // 创建一个文件集合
astFile, err := parser.ParseFile(fset, "", code, 0) // 解析代码字符串
if err != nil {
panic(err) // 如果解析失败,则panic
}
// 遍历语法树
ast.Inspect(astFile, func(n ast.Node) bool {
if n == nil {
return false
}
// 打印节点的类型和位置
fmt.Printf("Type: %T, Line: %d, Pos: %v\n", n, fset.Position(n.Pos()).Line, n.Pos())
return true
})
}
这段代码首先定义了一个包含Go语言代码的字符串,然后使用go/parser
包来解析这段代码,并生成语法树。ast.Inspect
函数用于遍历语法树中的所有节点,并打印出每个节点的类型、位置和行号。这个例子展示了如何使用Go语言的标准库来进行AST的基本操作。
评论已关闭