Golang compile to binary from AST
是否可以在Golang中将AST编译为二进制文件?还是API没有公开该功能。当前的库方式(例如Gisp)是使用go / printer程序包打印出AST。有没有一种方法可以跳过此过程,直接将AST编译为二进制文件?
好吧,gisp确实很酷,但是有一个技巧可以使用原始的go解析器来创建ast:
您可以创建一个本地符号链接到编译器/内部/语法文件夹:
1 | ln -s $GOROOT/src/cmd/compile/internal/syntax |
现在您的代码可以读取文件并像这样创建ast:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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;-)
暂时不,不。现在,尽管Go的编译器是用Go编写的,但是它并未在标准库中公开。
打印源并使用