关于go:Golang从AST编译为二进制

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编写的,但是它并未在标准库中公开。

打印源并使用go build的Gisp方法可能是您的最佳选择。