Golang从AST编译为二进制文件

时间:2015-10-01 01:15:23

标签: go abstract-syntax-tree

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

2 个答案:

答案 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方法可能是您的最佳选择。