此程序能够绘制简单的java9程序的程序流程图。
使用ANTLR4生成语法分析树,编写Visitor获得流程图结构,使用graphviz-java绘制流程图。
仅支持普通的if,switch,for,while,do while结构。
java9-flowchart 此部分负责将java9程序转化为流程图。
Java9FlowchartGenerator
程序主体,输入文件名和输出路径,输出图片。程序整体结构如下:
Java9FlowchartVisitor遍历语法树,每个方法构造一个流程图Flowchart;Flowchart生成graphviz-java的Graph;recognizer:此部分负责分析Java语法。
ANTLR4根据Java9.g4生成的基本分析器。
Java9FlowchartVisitor
Flowchart;Blocks中的方法转换不同的Context为子图Block,规则分类如下:
Node,有localVariableDeclaration, statementExpressionList, emptyStatement, expressionStatement, assertStatement, breakStatement, continueStatement, returnStatement;aggregateResult(aggregate, next)函数为顺序连接两个Block;if或switch的规则;for或while的规则。class,interface及method声明语句。Blocks
负责构造Block以及处理顺序、分支、循环的Block的连接。
JavaName
用于维护当前访问位置所在class/method。
flowchart
此部分为存储流程图的数据结构
Node
label 节点的标签;line 行号;Map<String, Node> links 边表。null。Block
start 入口节点;Map<String, NullLink> nullLinks 分类空边表;NullLink为单向环链,确保修改分类时的时间复杂度;move方法用于修改空边分类。Factory包含Block的工厂函数。Flowchart负责通过Block建graphviz-java的Graph。