是否可以在Golang中将AST编译为二进制文件?或者API是否不公开该功能。库当前这样做的方式,例如Gisp,是使用go / printer包打印出AST。有没有办法跳过这个过程并直接将AST编译成二进制文件?
答案 0 :(得分:1)
好吧,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;-)
答案 1 :(得分:0)
暂时不,不。现在,尽管Go的编译器是用Go编写的,但它是not exposed in the standard library。
打印源文件并使用go build
的Gisp方法可能是您的最佳选择。