最近在学习golang ast 相关代码,太不直观了,于是造了个轮子,可视化展示语法树。一键运行,直接在浏览器打开。
地址:https://github.com/xiazemin/ast_graph
我们知道,golang 的源码经过词法分析和语法分析后,可以得到抽象语法树ast,用户可以遍历抽象语法树实现源码层面的修改。 golang工具集很多都是在语法树的基础上进行的比如go fmt、goimport、go vet等等。
不太熟悉golang或者不太熟悉语法树的同学来说,一颗语法树包含哪些东西?语法树的结构是什么样子?源代码的每一部分如何与语法树相对应,是大家疑问比较密集的地方。于是乎,笔者造了个轮子,可视化的方式展示语法树,一键运行直接在浏览器打开生成的svg格式图片。颜色区分比较重要的语法结构。并且提供图利。
例子:
比如我们要分析下面源码
package mainimport ("fmt""github.com/xiazemin/golang/ast/ast_graph/exp/multi")func main() {a:=1b:=2fmt.Println(a+b,add(a,b),multi.Multi(a,b),devide(a,b))}func devide(i,j int)int {return i/j}
我们可以这么做
package mainimport "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是生成图片路径
运行结果如下所示

展示了完整的树形结构,和相关信息,方便我们快速学习抽象语法树。
上面的颜色对应的是分类。
完全兼容golang ast 的walker,用户可根据自己的需要裁剪自己感兴趣的部分语法树。


文章转载自golang算法架构leetcode技术php,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




