FlowChar代码流程图生成工具|文字流程图

FlowChar代码流程图生成工具|文字流程图

FlowChar

一个用来从伪代码生成纯字符格式流程图的小工具。

背景

前几天学习红黑树,插入和删除的操作过于复杂,心想画个小流程图好让笔记看上去更直观些,又懒得用画图工具,于是就一个字符一个字符地敲,敲完发现其实也没比用画图工具轻松多少。后来我就想搞一个小工具,只要输入一些很简单的伪代码就能生成一张纯字符格式的流程图,于是就有了这个仓库。

示例

伪代码:

be born;
while (alive) {
    if (happy) {
        smile;
    }
    else {
        try to be happy;
    }
}
die;

流程图:

              +-------------+                   
              |   be born   |                   
              +-------------+                   
                     |                          
                     V                          
             N /-----------\                    
+--------------|   alive   |<------------------+
|              \-----------/                   |
|                    | Y                       |
|                    V                         |
|            Y /-----------\ N                 |
|         +----|   happy   |----+              |
|         |    \-----------/    |              |
|         |                     |              |
|         V                     V              |
|   +-----------+    +---------------------+   |
|   |   smile   |    |   try to be happy   |   |
|   +-----------+    +---------------------+   |
|         |                     |              |
|         +--------->O<---------+              |
|                    |                         |
|                    V                         |
|                    O-------------------------+
|                                               
|                                               
|               +---------+                     
+-------------->|   die   |                     
                +---------+                     

顺序

伪代码:

first;
second;
third;

流程图:

 +-----------+ 
 |   first   | 
 +-----------+ 
       |       
       V       
+-------------+
|    second   |
+-------------+
       |       
       V       
 +-----------+ 
 |   third   | 
 +-----------+ 

分支

伪代码:

if (cond) {
    do this;
}

流程图:

 /-----------\ N   
 |    cond   |----+
 \-----------/    |
       | Y        |
       V          |
+-------------+   |
|   do this   |   |
+-------------+   |
       |          |
       V          |
       O<---------+

伪代码:

if (cond) {
    ok;
}
else {
    no;
}

流程图:

       Y /-----------\ N       
     +---|    cond   |---+     
     |   \-----------/   |     
     |                   |     
     V                   V     
+---------+         +---------+
|    ok   |         |    no   |
+---------+         +---------+
     |                   |     
     +-------->O<--------+     

循环

伪代码:

while (at home) {
    sleep;
}

流程图:

  N /-------------\    
+---|   at home   |<--+
|   \-------------/   |
|          | Y        |
|          V          |
|    +-----------+    |
|    |   sleep   |----+
|    +-----------+     
|                      
|                      
+--------->O       

如何使用

首先克隆仓库并进行构建:

git clone https://github.com/Gusabary/FlowChar.git
cd FlowChar

# for linux
chmod +x ./build.sh
./build.sh

# for windows
.\build.bat

然后指定伪代码文件,可选地,可以指定流程图输出文件,缺省的话会打印到标准输出:

cd build
./flowchar -c ../examples/simple -o ../examples/simple-chart

使用 -h 选项以打印帮助信息:

./flowchar -h

Docker

或者直接拉取 Docker 镜像,挂载并运行:

# from dockerhub
docker pull gusabary/flowchar:v1.0

# or from github
docker pull docker.pkg.github.com/gusabary/flowchar/flowchar:v1.0

# run
docker run -v /path/to/dir:/app/files gusabary/flowchar:v1.0 -c files/code -o files/chart

需要将伪代码文件所在目录挂载为容器的 /app/files 目录。

从 github docker registry 拉取镜像的话可能会需要 token,可以参考这里

伪代码语法

目前仅支持顺序结构,if-else 控制的选择结构以及 while 控制的循环结构。

一串以分号结尾的字符串是一个语句,会出现在流程图的一个方框中:

a;
do this;

if 关键字后要求跟一对圆括号,其中为 if 的判断条件,然后是由一对花括号包裹着的语句块:

if (condition) {
    statementA;
    statementB;
}

可选地,使用 else 关键字,并跟上一对花括号包裹着的语句块

if (condition) {
    ok;
}
else {
    no;
}

while 关键字后要求跟一对圆括号,其中为 while 的判断条件,然后是由一对花括号包裹着的语句块:

while (condition) {
    loop;
}

语句块可以是简单语句、if 语句和 while 语句的组合。

使用示例

简单的代码:

www.ddosi.com  ;
while (雨苁) {
    if (QQ=569743) {
        hack;
        root;
        control;
    }
    else {
        if(mail=cpu@usa.com){
            bypass;
            getshell;
            database;
        }
        else{
        kill;
        die;
        }
fun;
    }
}
die;

效果图:

                   +-------------------+                                  
                   |   www.ddosi.com   |                                  
                   +-------------------+                                  
                             |                                            
                             V                                            
                    N /-------------\                                     
+---------------------|    雨苁     |<-----------------------------------+
|                     \-------------/                                    |
|                            | Y                                         |
|                            V                                           |
|                  Y /---------------\ N                                 |
|          +---------|   QQ=569743   |---------+                         |
|          |         \---------------/         |                         |
|          |                                   |                         |
|          V                                   V                         |
|    +-----------+               Y /-----------------------\ N           |
|    |    hack   |             +---|    mail=cpu@usa.com   |---+         |
|    +-----------+             |   \-----------------------/   |         |
|          |                   |                               |         |
|          V                   V                               V         |
|    +-----------+      +-------------+                  +-----------+   |
|    |    root   |      |    bypass   |                  |    kill   |   |
|    +-----------+      +-------------+                  +-----------+   |
|          |                   |                               |         |
|          V                   V                               V         |
|   +-------------+    +---------------+                  +---------+    |
|   |   control   |    |    getshell   |                  |   die   |    |
|   +-------------+    +---------------+                  +---------+    |
|          |                   |                               |         |
|          |                   V                               |         |
|          |           +---------------+                       |         |
|          |           |    database   |                       |         |
|          |           +---------------+                       |         |
|          |                   |                               |         |
|          |                   |                               |         |
|          |                   |          +---------+          |         |
|          |                   +--------->|   fun   |<---------+         |
|          |                              +---------+                    |
|          |                                   |                         |
|          |                                   |                         |
|          |           +-----------+           |                         | 
|          +---------->|   happy   |<----------+                         |
|                      +-----------+                                     |
|                            |                                           |
|                            V                                           |
|                            O-------------------------------------------+
|                                                                         
|                                                                         
|                       +---------+                                       
+---------------------->|   die   |                                       
                        +---------+                                       

下载地址

①GitHub: github.com/Gusabary/FlowChar/releases
②迅雷网盘:pan.xunlei.com/ 提取码: ztfi