Not another JSON parser!
AST → JSON | JSON → AST
Marshals golang AST into JSON and unmarshals it back from JSON.
It allows building pattern matching, statistical analysis, language transformation, search/data-mine/anything algorithms for golang with any other language (I like to do it with python. Check out asty-python)
Input golang source
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
Ouput AST in JSON
{
"NodeType": "File",
"Name": {
"NodeType": "Ident",
"Name": "main"
},
"Decls": [
{
"NodeType": "GenDecl",
"Tok": "import",
"Specs": [
{
"NodeType": "ImportSpec",
"Name": null,
"Path": {
"NodeType": "BasicLit",
"Kind": "STRING",
"Value": "\"fmt\""
}
}
]
},
{
"NodeType": "FuncDecl",
"Recv": null,
"Name": {
"NodeType": "Ident",
"Name": "main"
},
"Type": {
"NodeType": "FuncType",
"TypeParams": null,
"Params": {
"NodeType": "FieldList",
"List": null
},
"Results": null
},
"Body": {
"NodeType": "BlockStmt",
"List": [
{
"NodeType": "ExprStmt",
"X": {
"NodeType": "CallExpr",
"Fun": {
"NodeType": "SelectorExpr",
"X": {
"NodeType": "Ident",
"Name": "fmt"
},
"Sel": {
"NodeType": "Ident",
"Name": "Println"
}
},
"Args": [
{
"NodeType": "BasicLit",
"Kind": "STRING",
"Value": "\"hello world\""
}
]
}
}
]
}
}
]
}
Just make
If you want to do it differently use go build
Convert AST to JSON
asty go2json -input <input.go> -output <output.json>
Convert JSON to AST
asty json2go -input <input.json> -output <output.go>
Use asty help for more information
Using with docker
docker run astyorg/asty go2json -input <input.go> -output <output.json>
I wrote an article about this project.
Content type
Image
Digest
sha256:deb94fa4a…
Size
4.3 MB
Last updated
over 3 years ago
docker pull astyorg/asty