是否可以在 Golang 中将 AST 编译为二进制文件?或者 API 没有公开该功能。库当前执行此操作的方式(例如Gisp)是使用 go/printer 包打印出 AST。有没有办法跳过这个过程并将 AST 直接编译为二进制文件?
2 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
好吧,gisp 真的很酷,但是有一个技巧可以使用原始的 go 解析器来创建那个 ast:
您可以创建指向编译器/内部/语法文件夹的本地符号链接:
ln -s $GOROOT/src/cmd/compile/internal/syntax
现在你的代码可以读取一个文件并像这样创建一个 ast:
package main
import (
"fmt"
"github.com/me/gocomp/syntax"
"os"
)
func main() {
filename := "./main.go"
errh := syntax.ErrorHandler(
func(err error) {
fmt.Println(err)
})
ast, _ := syntax.ParseFile(
filename,
errh,
nil,
0)
f, _ := os.Create("./main.go.ast")
defer f.Close()
syntax.Fdump(f, ast) //<--this prints out your AST nicely
}
现在我不知道你如何编译它......但是嘿,至少你有你的 AST ;-)
- 2 回答
- 0 关注
- 295 浏览
添加回答
举报
0/150
提交
取消