此程序能够绘制简单的java9程序的程序流程图。
使用ANTLR4生成语法分析树,编写Visitor获得流程图结构,使用graphviz-java绘制流程图。
java9-flowchart 此部分负责将java9程序转化为流程图。
Java9FlowchartGenerator
程序主体,输入文件名和输出路径,输出图片。程序整体结构如下:
Java9FlowchartVisitor遍历语法树,建图;Flowchart将图翻译为graphviz-java需要的形式;recognizer:此部分负责分析Java语法。
ANTLR4根据Java9.g4生成的基本分析器。
Java9FlowchartVisitor负责处理Block的连接。
继承自Java9BaseVisitor<Block>,即visit函数返回Block,Block维护一个子图。我们需要对每条规则设计正确的Block生成方式。规则分类如下(未列出的规则默认返回defaultResult() -> null):
Block,不再向下递归,有localVariableDeclaration, statementExpressionList, emptyStatement, expressionStatement, assertStatement, breakStatement, continueStatement, returnStatement;aggregateResult(aggregate, next)函数为以顺序结构的方式连接两个Block即可;if或switch的规则。需要使用正确的方式连接一个判断Block和一或多个分支Block;for或while的规则。在分支结构的基础上,再增加一条边形成循环即可。Blocks
提供更多构造Block的工厂方法。
用于精简Java9FlowchartVisitor中重复代码。
JavaName
用于维护当前访问位置所在class/method。
resource
grammar 存放Java9.g4
flowchart 此部分为存储流程图的数据结构
java
Node
代表流程图的一个节点,成员有:
label 节点的标签;line 行号;Map<String, Node> links存储转移边。null,称为空边。Block操作,对Java9FlowchartVisitor透明。Block
代表一个子流程图,负责实现块连接的基本操作,成员有:
start 入口节点;nullLinks 空边表,空边有分类,分类不固定,可修改,初始为边的标记。
块连接
modifyLinkType。