为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 从 AST 编译成二进制文件

Golang 从 AST 编译成二进制文件

Go
梵蒂冈之花 2021-11-08 19:16:31
是否可以在 Golang 中将 AST 编译为二进制文件?或者 API 没有公开该功能。库当前执行此操作的方式(例如Gisp)是使用 go/printer 包打印出 AST。有没有办法跳过这个过程并将 AST 直接编译为二进制文件?
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

目前没有,没有。目前,虽然 Go 的编译器是用 Go 编写的,但它并没有在标准库中公开

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


查看完整回答
反对 回复 2021-11-08
?
POPMUISE

TA贡献1765条经验 获得超5个赞

好吧,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 ;-)


查看完整回答
反对 回复 2021-11-08
  • 2 回答
  • 0 关注
  • 295 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信