最近在学习golang ast 相关代码,太不直观了,因而造了个轮子,可视化展现语法树。一键运行,直接在浏览器打开。
php
地址:https://github.com/xiazemin/ast_graphgit
咱们知道,golang 的源码通过词法分析和语法分析后,能够获得抽象语法树ast,用户能够遍历抽象语法树实现源码层面的修改。 golang工具集不少都是在语法树的基础上进行的好比go fmt、goimport、go vet等等。
github
不太熟悉golang或者不太熟悉语法树的同窗来讲,一颗语法树包含哪些东西?语法树的结构是什么样子?源代码的每一部分如何与语法树相对应,是你们疑问比较密集的地方。因而乎,笔者造了个轮子,可视化的方式展现语法树,一键运行直接在浏览器打开生成的svg格式图片。颜色区分比较重要的语法结构。而且提供图利。golang
例子:算法
好比咱们要分析下面源码浏览器
package main
import ( "fmt" "github.com/xiazemin/golang/ast/ast_graph/exp/multi")
func main() { a:=1 b:=2 fmt.Println(a+b,add(a,b),multi.Multi(a,b),devide(a,b))
}
func devide(i,j int)int { return i/j}
咱们能够这么作
微信
package main
import "github.com/xiazemin/golang/ast/ast_graph/gen"
func main() { path := "/Users/didi/goLang/src/github.com/xiazemin/golang/ast/ast_graph/exp/main.go" dpath := "/Users/didi/goLang/src/github.com/xiazemin/golang/ast/ast_graph/" gen.GenSvg(path, dpath, "tree")}
其中path是咱们的源码路径,dpath是生成图片路径
架构
运行结果以下所示
ide
展现了完整的树形结构,和相关信息,方便咱们快速学习抽象语法树。
svg
上面的颜色对应的是分类。
彻底兼容golang ast 的walker,用户可根据本身的须要裁剪本身感兴趣的部分语法树。
本文分享自微信公众号 - golang算法架构leetcode技术php(golangLeetcode)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。