小编use*_*814的帖子

如何打印手写的AST?

我有一组网络协议的 XML 描述,我试图从中生成 Go 代码,因此我没有任何现有的 Go 代码可以使用。所有使用go/ast(例如go fmt)的示例都采用现有代码,对 AST 进行一些转换,然后将它们写回。因为我只有 XML 文件,所以我正在使用的 AST 必须手工编写。问题是我无法让我的手写 AST 输出。

例子

package main

import (
    "go/ast"
    "go/printer"
    "go/token"
    "os"
)

func main() {
    f := ast.File{
        Name: ast.NewIdent("foo"),
        Decls: []ast.Decl{
            &ast.GenDecl{
                Tok: token.TYPE,
                Specs: []ast.Spec{
                    &ast.TypeSpec{
                        Name: ast.NewIdent("Bar"),
                        Type: ast.NewIdent("uint32"),
                    },
                },
            },
        },
    }
    fset := token.NewFileSet()
    printer.Fprint(os.Stdout, fset, f)
}
Run Code Online (Sandbox Code Playgroud)

预期输出:

package foo

type Bar uint32
Run Code Online (Sandbox Code Playgroud)

实际输出:无

如何让 AST 打印?

code-generation abstract-syntax-tree go

1
推荐指数
1
解决办法
1383
查看次数

标签 统计

abstract-syntax-tree ×1

code-generation ×1

go ×1