Code Translator

Online ast dump of golang code

Go ast is very useful mechanism which is provide how to read your text code into valid go code without checking scope and undefined variables.

But normal AST in go language are not provide all information. Such as data type of binary expression, calling method return type and package of calling method etc.

Here provides basic example which is mention some missing information.

// Go Code
package main

import (
  "fmt"
  "math"
  "math/rand"
)

func main() {
  fmt.Println(math.Abs(-3))
  fmt.Println(rand.Intn(3))
}
AST Output
{
  "source": [
    {
      "0": "ast.File",
      "Package": "1:1",
      "Name": {
        "0": "ast.Ident",
        "NamePos": "1:9",
        "Name": "main"
      },
      "Decls": [
        {
          "0": "ast.GenDecl",
          "TokPos": "3:1",
          "Tok": "import",
          "Lparen": "3:8",
          "Specs": [
            {
              "0": "ast.ImportSpec",
              "Path": {
                "0": "ast.BasicLit",
                "ValuePos": "4:2",
                "Kind": "STRING",
                "Value": "\"fmt\""
              },
              "EndPos": "-"
            },
            {
              "0": "ast.ImportSpec",
              "Path": {
                "0": "ast.BasicLit",
                "ValuePos": "5:2",
                "Kind": "STRING",
                "Value": "\"math\""
              },
              "EndPos": "-"
            },
            {
              "0": "ast.ImportSpec",
              "Path": {
                "0": "ast.BasicLit",
                "ValuePos": "6:2",
                "Kind": "STRING",
                "Value": "\"math/rand\""
              },
              "EndPos": "-"
            }
          ],
          "Rparen": "7:1"
        },
        {
          "0": "ast.FuncDecl",
          "Name": {
            "0": "ast.Ident",
            "NamePos": "9:6",
            "is": "Func",
            "is_signature": "func main()",
            "is_pkg": "main",
            "is_path": "",
            "Name": "main",
            "Obj": {
              "0": "ast.Object",
              "Kind": "func",
              "Name": "main",
              "Decl": "39"
            }
          },
          "Type": {
            "0": "ast.FuncType",
            "Func": "9:1",
            "Params": {
              "0": "ast.FieldList",
              "Opening": "9:10",
              "Closing": "9:11"
            }
          },
          "Body": {
            "0": "ast.BlockStmt",
            "Lbrace": "9:13",
            "List": [
              {
                "0": "ast.ExprStmt",
                "X": {
                  "0": "ast.CallExpr",
                  "Fun": {
                    "0": "ast.SelectorExpr",
                    "X": {
                      "0": "ast.Ident",
                      "NamePos": "10:2",
                      "is": "PkgName",
                      "is_pakage": "main",
                      "is_imported": "fmt",
                      "Name": "fmt"
                    },
                    "Sel": {
                      "0": "ast.Ident",
                      "NamePos": "10:6",
                      "is_path": "fmt",
                      "is": "Func",
                      "is_signature": "func fmt.Println(a ...any) (n int, err error)",
                      "is_pkg": "fmt",
                      "Name": "Println"
                    }
                  },
                  "Lparen": "10:13",
                  "return": "(n int, err error)",
                  "Args": [
                    {
                      "0": "ast.CallExpr",
                      "Fun": {
                        "0": "ast.SelectorExpr",
                        "X": {
                          "0": "ast.Ident",
                          "NamePos": "10:14",
                          "is": "PkgName",
                          "is_pakage": "main",
                          "is_imported": "math",
                          "Name": "math"
                        },
                        "Sel": {
                          "0": "ast.Ident",
                          "NamePos": "10:19",
                          "is": "Func",
                          "is_signature": "func math.Abs(x float64) float64",
                          "is_pkg": "math",
                          "is_path": "math",
                          "Name": "Abs"
                        }
                      },
                      "Lparen": "10:22",
                      "return": "float64",
                      "Args": [
                        {
                          "0": "ast.UnaryExpr",
                          "OpPos": "10:23",
                          "Op": "-",
                          "X": {
                            "0": "ast.BasicLit",
                            "ValuePos": "10:24",
                            "Kind": "INT",
                            "Value": "3"
                          }
                        }
                      ],
                      "Ellipsis": "-",
                      "Rparen": "10:25"
                    }
                  ],
                  "Ellipsis": "-",
                  "Rparen": "10:26"
                }
              },
              {
                "0": "ast.ExprStmt",
                "X": {
                  "0": "ast.CallExpr",
                  "Fun": {
                    "0": "ast.SelectorExpr",
                    "X": {
                      "0": "ast.Ident",
                      "NamePos": "11:2",
                      "is_imported": "fmt",
                      "is": "PkgName",
                      "is_pakage": "main",
                      "Name": "fmt"
                    },
                    "Sel": {
                      "0": "ast.Ident",
                      "NamePos": "11:6",
                      "is_signature": "func fmt.Println(a ...any) (n int, err error)",
                      "is_pkg": "fmt",
                      "is_path": "fmt",
                      "is": "Func",
                      "Name": "Println"
                    }
                  },
                  "Lparen": "11:13",
                  "return": "(n int, err error)",
                  "Args": [
                    {
                      "0": "ast.CallExpr",
                      "Fun": {
                        "0": "ast.SelectorExpr",
                        "X": {
                          "0": "ast.Ident",
                          "NamePos": "11:14",
                          "is": "PkgName",
                          "is_pakage": "main",
                          "is_imported": "rand",
                          "Name": "rand"
                        },
                        "Sel": {
                          "0": "ast.Ident",
                          "NamePos": "11:19",
                          "is_pkg": "rand",
                          "is_path": "math/rand",
                          "is": "Func",
                          "is_signature": "func math/rand.Intn(n int) int",
                          "Name": "Intn"
                        }
                      },
                      "Lparen": "11:23",
                      "return": "int",
                      "Args": [
                        {
                          "0": "ast.BasicLit",
                          "ValuePos": "11:24",
                          "Kind": "INT",
                          "Value": "3"
                        }
                      ],
                      "Ellipsis": "-",
                      "Rparen": "11:25"
                    }
                  ],
                  "Ellipsis": "-",
                  "Rparen": "11:26"
                }
              }
            ],
            "Rbrace": "12:1"
          }
        }
      ],
      "Scope": {
        "0": "ast.Scope",
        "Objects": {
          "0": "map[string]*ast.Object",
          "main": "47"
        }
      },
      "Imports": [
        "12",
        "20",
        "28"
      ],
      "Unresolved": [
        "66",
        "87",
        "127",
        "148"
      ]
    }
  ]
}

Tools

Our goal is to provide high quality code converter tool for programmers here are mentioned few tools.

Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment







© 2022, kalkicode.com, All rights reserved