Enter-tainer / cxx2flow

将 C/C++ 代码转换成流程图 / Turn your C/C++ code into flowchart
MIT License
738 stars 61 forks source link

我喜欢这个想法 #2

Closed YeTianXingShi closed 3 years ago

YeTianXingShi commented 3 years ago

请问作者后续会打算添加支持java吗》或者提供一下相关思路

Enter-tainer commented 3 years ago

请问作者后续会打算添加支持java吗》或者提供一下相关思路

理论上应该可以做。treesitter 支持的语言有很多。只需要在 parser.rs 加上关于 java 的支持,把 java 代码的 treesitter ast 翻译成这个项目里面的 ast,应该就可以了🤔。

不过我对java不是很熟,不知道java有没有一些比较独特的控制流语句。

YeTianXingShi commented 3 years ago

如果作者有时间可以添加支持java》吗或者提供一下相关思路

以后应该可以做。treesitter 支持的语言有很多。只需要在parser.rs 加上java 的支持,把java 代码的treesitter ast 翻译成这个项目里面的ast,应该就可以了🤔。

不过我对java不是很熟,不知道java有没有一些比较独特的控制流语句。

谢谢啦 我看到treesitter有对JAVA的原生支持,我想问下 这个对于多入口的项目是怎样的处理逻辑。

Enter-tainer commented 3 years ago

如果作者有时间可以添加支持java》吗或者提供一下相关思路

以后应该可以做。treesitter 支持的语言有很多。只需要在parser.rs 加上java 的支持,把java 代码的treesitter ast 翻译成这个项目里面的ast,应该就可以了🤔。

不过我对java不是很熟,不知道java有没有一些比较独特的控制流语句。

谢谢啦 我看到treesitter有对JAVA的原生支持,我想问下 这个对于多入口的项目是怎样的处理逻辑。

现在的实现,是一次只能处理一个文件中的一个函数。在命令行选项中可以选择需要处理的函数的名字。

YeTianXingShi commented 3 years ago

如果作者有时间可以添加支持java》吗或者提供一下相关思路

以后应该可以做。treesitter 支持的语言有很多。只需要在parser.rs 加上java 的支持,把java 代码的treesitter ast 翻译成这个项目里面的ast,应该就可以了🤔。 不过我对java不是很熟,不知道java有没有一些比较独特的控制流语句。

谢谢啦 我看到treesitter有对JAVA的原生支持,我想问下 这个对于多入口的项目是怎样的处理逻辑。

现在的实现,是一次只能处理一个文件中的一个函数。在命令行选项中可以选择需要处理的函数的名字。

我想拓展到支持一个项目的流程图导出,能够支持多入口,并且还有多个接口之间互相调用的逻辑。目前想法还很初步。请问你怎么想?

Enter-tainer commented 3 years ago

函数调用关系(call graph)的话,其实 doxygen 就可以生成(如图),不过这个就没有函数内部的逻辑了。

image

我个人做这个项目其实主要是为了应付实验报告的😂。流程图实际上是一种“中间代码”,无论是手工绘制,还是自动生成,都需要将结构化的流程控制语句(if else, for, while, ...)转换成 goto 和 branch。从这个角度讲,流程图的实用性是很有限的。因此我自己其实是从来不画流程图的,只有在课程要求的时候,才会捏着鼻子画一点。而且在逻辑复杂的函数中,流程图几乎是不可读的,如 https://github.com/Enter-tainer/cxx2flow/blob/master/gallery.md#%E8%A7%A3%E6%9E%90%E6%95%B0%E5%80%BC

我接下来会尝试将这个项目编译成 wasm 并搬到浏览器上,多入口和 call graph 的功能暂时不会考虑。