ignalxy пре 4 година
родитељ
комит
13346985db

+ 31 - 0
docs/java9-flowchart.md

@@ -0,0 +1,31 @@
+# java9-flowchart
+
+## 简介
+
+此程序能够绘制简单的java9程序的程序流程图。
+
+使用ANTLR4生成语法分析树,编写Visitor获得流程图结构,使用graphviz-java绘制流程图。
+
+## 结构
+
+- java9-flowchart
+  此部分负责将java9程序转化为流程图。
+  - java 
+      - Java9FlowchartGenerator 程序入口,需提供两个参数:java文件路径及输出文件夹路径。
+      - recognizer
+        此部分负责分析Java语法,包括ANTLR4根据Java9.g4生成的文件,以及自定义的访问器Java9FlowchartVisitor。
+        其中Java9FlowchartVisitor负责将Java9程序转化为图结构。
+      - utils
+        一些用于精简Java9FlowchartVisitor中重复代码的小工具。
+        - JavaName
+          用于维护当前访问位置所在class/method。
+  - resource
+      - grammar 
+        存放Java9.g4
+- flowchart
+  此部分为存储流程图的数据结构
+  - java
+      - Block
+        
+      - Blocks
+        提供更多构造Block的工厂方法。

+ 1 - 1
flowchart/src/main/java/xyz/ignatz/flowchart/Flowchart.java

@@ -35,7 +35,7 @@ public class Flowchart {
         map.get(block.getStart()).add(Shape.BOX, Style.ROUNDED);
         g = mutGraph(name).setDirected(true)
                 .graphAttrs().add(Rank.dir(Rank.RankDir.TOP_TO_BOTTOM))
-                .graphAttrs().add(Font.config("Arial", 10))
+                .graphAttrs().add(Font.config("Arial", 10))  // TODO: does not work
                 .add(new ArrayList<>(map.values())).toImmutable();
     }
 

+ 1 - 2
java9-flowchart/src/main/java/xyz/ignatz/antlr/java9/recognizer/Java9FlowchartVisitor.java

@@ -4,11 +4,10 @@ import xyz.ignatz.antlr.java9.utils.JavaName;
 import xyz.ignatz.flowchart.Flowchart;
 import xyz.ignatz.flowchart.module.Block;
 import xyz.ignatz.flowchart.module.Node;
+import xyz.ignatz.antlr.utils.Blocks;
 
 import java.util.*;
 
-import xyz.ignatz.antlr.java9.utils.Blocks;
-
 
 public class Java9FlowchartVisitor extends Java9BaseVisitor<Block> {
     List<Flowchart> flowcharts = new ArrayList<>();

+ 0 - 8
java9-flowchart/src/main/java/xyz/ignatz/antlr/java9/utils/Blocks.java

@@ -1,8 +0,0 @@
-package xyz.ignatz.antlr.java9.utils;
-
-import org.antlr.v4.runtime.ParserRuleContext;
-import xyz.ignatz.antlr.java9.recognizer.Java9Parser;
-import xyz.ignatz.flowchart.module.Block;
-
-public class Blocks extends xyz.ignatz.antlr.utils.Blocks {
-}

BIN
output/flowchart/Person#main.png