最近在學習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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。