暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

可视化查看go语法树

最近在学习golang  ast 相关代码,太不直观了,于是造了个轮子,可视化展示语法树。一键运行,直接在浏览器打开。


地址:https://github.com/xiazemin/ast_graph

        我们知道,golang 的源码经过词法分析和语法分析后,可以得到抽象语法树ast,用户可以遍历抽象语法树实现源码层面的修改。 golang工具集很多都是在语法树的基础上进行的比如go fmt、goimport、go vet等等。

       不太熟悉golang或者不太熟悉语法树的同学来说,一颗语法树包含哪些东西?语法树的结构是什么样子?源代码的每一部分如何与语法树相对应,是大家疑问比较密集的地方。于是乎,笔者造了个轮子,可视化的方式展示语法树,一键运行直接在浏览器打开生成的svg格式图片。颜色区分比较重要的语法结构。并且提供图利。


例子:

比如我们要分析下面源码

    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是生成图片路径


      运行结果如下所示

      展示了完整的树形结构,和相关信息,方便我们快速学习抽象语法树。


      上面的颜色对应的是分类。


      完全兼容golang ast 的walker,用户可根据自己的需要裁剪自己感兴趣的部分语法树。


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

      评论