簡體   English   中英

Golang從AST編譯為二進制文件

[英]Golang compile to binary from AST

是否可以在Golang中將AST編譯為二進制文件? 或者API是否不公開該功能。 庫目前這樣做的方式,如Gisp ,是使用go / printer軟件包打印出AST。 有沒有辦法跳過這個過程並直接將AST編譯成二進制文件?

好吧,gisp非常酷,但使用原始的解析器來創建它是一個技巧:

您可以為compiler / internal / syntax文件夾創建一個本地符號鏈接:

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 ;-)

不是現在,不。 現在,盡管Go的編譯器是用Go編寫的,但它並沒有在標准庫中公開

打印源和使用go build的Gisp方法可能是您的最佳選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM