猿问

Golang 从 AST 编译成二进制文件

是否可以在 Golang 中将 AST 编译为二进制文件?或者 API 没有公开该功能。库当前执行此操作的方式(例如Gisp)是使用 go/printer 包打印出 AST。有没有办法跳过这个过程并将 AST 直接编译为二进制文件?


梵蒂冈之花
浏览 296回答 2
2回答

蓝山帝景

目前没有,没有。目前,虽然 Go 的编译器是用 Go 编写的,但它并没有在标准库中公开。打印源代码并使用 的 Gisp 方法go build可能是您的最佳选择。

POPMUISE

好吧,gisp 真的很酷,但是有一个技巧可以使用原始的 go 解析器来创建那个 ast:您可以创建指向编译器/内部/语法文件夹的本地符号链接:ln -s $GOROOT/src/cmd/compile/internal/syntax现在你的代码可以读取一个文件并像这样创建一个 ast:package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "github.com/me/gocomp/syntax"&nbsp; &nbsp; "os")func main() {&nbsp; &nbsp; filename := "./main.go"&nbsp; &nbsp; errh := syntax.ErrorHandler(&nbsp; &nbsp; &nbsp; &nbsp; func(err error) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(err)&nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; ast, _ := syntax.ParseFile(&nbsp; &nbsp; &nbsp; &nbsp; filename,&nbsp; &nbsp; &nbsp; &nbsp; errh,&nbsp; &nbsp; &nbsp; &nbsp; nil,&nbsp; &nbsp; &nbsp; &nbsp; 0)&nbsp; &nbsp; f, _ := os.Create("./main.go.ast")&nbsp; &nbsp; defer f.Close()&nbsp; &nbsp; syntax.Fdump(f, ast) //<--this prints out your AST nicely}现在我不知道你如何编译它......但是嘿,至少你有你的 AST ;-)
随时随地看视频慕课网APP

相关分类

Go
我要回答