Pārlūkot izejas kodu

java9-flowchart generally completed

ignalxy 4 gadi atpakaļ
vecāks
revīzija
f206e4d722

+ 1 - 1
.gitignore

@@ -1,4 +1,4 @@
 /aidl-to-json/target/
-/java-flowchart/target/
+/java9-flowchart/target/
 /flowchart/target/
 /map-to-json/target/

+ 3 - 0
.idea/compiler.xml

@@ -6,6 +6,7 @@
         <sourceOutputDir name="target/generated-sources/annotations" />
         <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
         <outputRelativeToContentRoot value="true" />
+        <module name="java9-flowchart" />
         <module name="map-to-json" />
         <module name="flowchart" />
         <module name="aidl-to-json" />
@@ -14,6 +15,8 @@
     </annotationProcessing>
     <bytecodeTargetLevel>
       <module name="aidl2json" target="8" />
+      <module name="java-control-flow" target="8" />
+      <module name="utils" target="8" />
     </bytecodeTargetLevel>
   </component>
 </project>

+ 1 - 1
aidl-to-json/src/main/java/xyz/ignatz/antlr/aidl/AidlToJson.java

@@ -29,7 +29,7 @@ public class AidlToJson
         walker.walk(listener, tree);
         OutputStream os = null;
         try {
-            os = new FileOutputStream(new File(args[1] + '\\' + listener.getName() + ".json"), false);
+            os = new FileOutputStream(args[1] + listener.getName() + ".json", false);
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         }

+ 29 - 0
example/java/Test.java

@@ -24,5 +24,34 @@ class Person{
 			System.out.println("456");
 			break;
 		}
+
+		do {
+			age*=2;
+		} while (age < 30);
+
+		test:
+		while (age>10) {
+			if (age%3==2) {
+				do {
+					age += 2;
+					if (age >= 100) {
+						break;
+					} else if (age <= 50) {
+						assert age != 24 : "error";
+						age *= 3;
+						continue;
+					} else {
+						age /= 2;
+					}
+					age *= 2;
+				} while (age < 80);
+			} else if (age == 4) ++age;
+			else if (age == 5)
+				if (age == 6) age += 6;
+				else {
+					age--;
+					continue;
+				}
+		}
 	}
 }

+ 17 - 0
flowchart/pom.xml

@@ -10,6 +10,23 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>flowchart</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>guru.nidi</groupId>
+            <artifactId>graphviz-java</artifactId>
+            <version>0.18.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-nop</artifactId>
+            <version>1.7.30</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+        </dependency>
+    </dependencies>
 
     <properties>
         <maven.compiler.source>8</maven.compiler.source>

+ 39 - 16
flowchart/src/main/java/xyz/ignatz/antlr/utils/Blocks.java

@@ -1,38 +1,61 @@
 package xyz.ignatz.antlr.utils;
 
 import org.antlr.v4.runtime.ParserRuleContext;
-import xyz.ignatz.flowchart.Block;
-import xyz.ignatz.flowchart.Node;
+import org.antlr.v4.runtime.misc.Interval;
+import xyz.ignatz.flowchart.module.Block;
+import xyz.ignatz.flowchart.module.Node;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 public class Blocks {
+    public static String getFullText(ParserRuleContext ctx) {
+        return ctx.children == null ? ""
+                : ctx.start.getInputStream().getText(
+                        new Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
+    }
+
     public static Block build(ParserRuleContext ctx) {
-        return build(ctx, Arrays.asList(null));
+        return build(ctx, "");
     }
 
-    public static Block build(ParserRuleContext ctx, String dsc) {
-        return build(ctx, Arrays.asList(dsc));
+    public static Block build(ParserRuleContext ctx, String tpDsc) {
+        return build(ctx, Arrays.asList(tpDsc));
     }
 
-    public static Block build(ParserRuleContext ctx, Map<String, Node> tps) {
-        return new Block(buildNode(ctx, tps));
+    public static Block buildJudgement(ParserRuleContext ctx) {
+        Objects.requireNonNull(ctx);
+        return build(ctx, Arrays.asList("true", "false"));
+    }
+
+    public static Block buildJudgement(ParserRuleContext ctx, Integer line) {
+        return ctx == null ? build("true", line, "true") : buildJudgement(ctx);
     }
 
     public static Block build(ParserRuleContext ctx, Collection<String> tpDscs) {
         Map<String, Node> tps = new HashMap<>();
-        tpDscs.forEach(dsc -> tps.put(dsc, null));
+        tpDscs.forEach(tpDsc -> tps.put(tpDsc, null));
         return build(ctx, tps);
     }
 
-    public static Block buildJudgement(ParserRuleContext ctx) {
-        return build(ctx, Arrays.asList("true", "false"));
+    public static Block build(ParserRuleContext ctx, Map<String, Node> tps) {
+        return ctx == null ? null : new Block(new Node(getFullText(ctx), ctx.getStart().getLine(), tps));
+    }
+
+    public static Block build(String dsc, Integer line) {
+        return build(dsc, line, "");
+    }
+
+    public static Block build(String dsc, Integer line, String tpDsc) {
+        return build(dsc, line, Arrays.asList(tpDsc));
+    }
+
+    public static Block build(String dsc, Integer line, Collection<String> tpDscs) {
+        Map<String, Node> tps = new HashMap<>();
+        tpDscs.forEach(tpDsc -> tps.put(tpDsc, null));
+        return build(dsc, line, tps);
     }
 
-    static Node buildNode(ParserRuleContext ctx, Map<String, Node> tps) {
-        return new Node(ctx.getText(), ctx.getStart().getLine(), tps);
+    public static Block build(String dsc, Integer line, Map<String, Node> tps) {
+        return new Block(new Node(dsc, line, tps));
     }
 }

+ 0 - 87
flowchart/src/main/java/xyz/ignatz/flowchart/Block.java

@@ -1,87 +0,0 @@
-package xyz.ignatz.flowchart;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.function.Predicate;
-
-public class Block {
-
-    class Edge {
-        Node src;
-        String dsc;
-        public Edge(Node src, String dsc) {
-            this.src = src;
-            this.dsc = dsc;
-        }
-    }
-
-    Node start;
-    Map<String, HashSet<Edge>> nullEdges = new HashMap<>();
-
-    public Block(Node node) {
-        start = node;
-        addEnd(node);
-    }
-
-    public Node getStart() {
-        return start;
-    }
-
-    public void addEnd(Node node) {
-        node.tps.forEach((dsc, dst) -> {
-            if (dst == null) {
-                nullEdges.putIfAbsent(dsc, new HashSet<>());
-                nullEdges.get(dsc).add(new Edge(node, dsc));
-            }
-        });
-    }
-
-    public void connectLoopJudgement(Block judgement, boolean judgeFirst) {
-        judgement.connect("true", start);
-        connect(str -> str == null || str == "continue", judgement);
-        replaceTpDsc("false", null);
-        replaceTpDsc("break", null);
-        if (judgeFirst) start = judgement.start;
-    }
-
-    public void connect(Block next) {
-        connect(str -> str == null, next);
-    }
-
-    public void connect(String dsc, Block next) {
-        connect(str -> dsc == null ? str == null : str.equals(dsc), next);
-    }
-
-    public void connect(Predicate<String> filter, Block next) {
-        connect(filter, next.start);
-        merge(next);
-    }
-
-    void replaceTpDsc(String old, String dsc) {
-        if (dsc == null ? old == null : old.equals(dsc)) return;
-        nullEdges.putIfAbsent(dsc, new HashSet<>());
-        nullEdges.get(dsc).addAll(nullEdges.remove(old));
-    }
-
-    void connect(String dsc, Node dst) {
-        connect(str -> dsc == null ? str == null : str.equals(dsc), dst);
-    }
-
-    void connect(Predicate<String> filter, Node dst) {
-        nullEdges.forEach((type, edges) -> {
-            if (filter.test(type)) {
-                edges.forEach(edge -> edge.src.connect(edge.dsc, dst));
-            } });
-    }
-
-    void merge(Block other) {
-        other.nullEdges.forEach((type, edges) ->
-                nullEdges.merge(type, edges, (old, value) -> {
-                    old.addAll(value);
-                    return old;
-                })
-        );
-        other.nullEdges = nullEdges;
-    }
-}

+ 49 - 0
flowchart/src/main/java/xyz/ignatz/flowchart/Flowchart.java

@@ -0,0 +1,49 @@
+package xyz.ignatz.flowchart;
+
+import java.util.*;
+
+import guru.nidi.graphviz.attribute.*;
+import guru.nidi.graphviz.model.Graph;
+import guru.nidi.graphviz.model.MutableNode;
+import xyz.ignatz.flowchart.module.Block;
+import xyz.ignatz.flowchart.module.INode;
+
+import static guru.nidi.graphviz.model.Factory.*;
+
+
+public class Flowchart {
+    Graph g;
+    public Flowchart(String name, Block block) {
+        Queue<INode> queue = new LinkedList<>();
+        Map<INode, MutableNode> map = new HashMap<>();
+        map.put(null, mutNode("END").add(Shape.BOX, Style.ROUNDED));
+        queue.add(block.getStart());
+        while (!queue.isEmpty()) {
+            INode n = queue.poll();
+            if (n == null) continue;
+            map.put(n, mutNode(Label.html(n.html())));
+            Collection<INode> ns = n.links().values();
+            ns.removeAll(map.keySet());
+            queue.addAll(ns);
+        }
+        map.forEach((i, n) -> {
+            if (i == null) return;
+            Map<String, INode> tps = i.links();
+            n.add(tps.size() > 1 ? Shape.DIAMOND : Shape.BOX);
+            tps.forEach((dsc, dst) -> n.addLink(to(map.get(dst)).with(Label.of(dsc))));
+        });
+        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))
+                .add(new ArrayList<>(map.values())).toImmutable();
+    }
+
+    public Graph graph() {
+        return g;
+    }
+
+    public String getName() {
+        return g.name().value();
+    }
+}

+ 0 - 23
flowchart/src/main/java/xyz/ignatz/flowchart/Node.java

@@ -1,23 +0,0 @@
-package xyz.ignatz.flowchart;
-
-import java.util.*;
-
-public class Node {
-    String desc;
-    Integer line;
-    Map<String, Node> tps;
-
-    public Node(String desc, Integer line, Map<String, Node> tps) {
-        this.desc = desc;
-        this.line = line;
-        this.tps = tps;
-    }
-
-    public boolean connect(String tpDsc, Node dst) {
-        if (tps.containsKey(tpDsc) && tps.get(tpDsc) == null) {
-            tps.put(tpDsc, dst);
-            return true;
-        }
-        return false;
-    }
-}

+ 80 - 0
flowchart/src/main/java/xyz/ignatz/flowchart/module/Block.java

@@ -0,0 +1,80 @@
+package xyz.ignatz.flowchart.module;
+
+
+import java.util.*;
+
+public class Block {
+
+    class Edge {
+        Node src;
+        String label;
+        public Edge(Node src, String label) {
+            this.src = src;
+            this.label = label;
+        }
+    }
+
+    Node start;
+    Map<String, HashSet<Edge>> nullEdges = new HashMap<>();
+
+    public Block(Node node) {
+        start = node;
+        node.tps.forEach((label, dst) -> {
+            if (dst == null) {
+                nullEdges.putIfAbsent(label, new HashSet<>());
+                nullEdges.get(label).add(new Edge(node, label));
+            }
+        });
+    }
+
+    public Node getStart() {
+        return start;
+    }
+
+    public void connectLoopJudgement(Block judgement, boolean judgeFirst) {
+        judgement.connect(start, "true");
+        connect(judgement, Arrays.asList("", "continue"));
+        modifyTpType("false", "");
+        modifyTpType("break", "");
+        if (judgeFirst) start = judgement.start;
+    }
+
+    public void connect(Block next) {
+        connect(next,"");
+    }
+
+    public void connect(Block next, String type) {
+        connect(next, Arrays.asList(type));
+    }
+
+    public void connect(Block next, Collection<String> types) {
+        if (next == null) return;
+        types.forEach(type -> connect(next.start, type));
+        merge(next);
+    }
+
+    public void modifyTpType(String old, String type) {
+        Objects.requireNonNull(old);
+        Objects.requireNonNull(type);
+        if (type.equals(old) || !nullEdges.containsKey(old)) return;
+        nullEdges.putIfAbsent(type, new HashSet<>());
+        nullEdges.get(type).addAll(nullEdges.remove(old));
+    }
+
+
+    void connect(Node dst, String type) {
+        Set<Edge> edges = nullEdges.remove(type);
+        if (edges == null) return;
+        edges.forEach(edge -> edge.src.connect(dst, edge.label));
+    }
+
+    void merge(Block other) {
+        other.nullEdges.forEach((type, edges) ->
+                nullEdges.merge(type, edges, (old, value) -> {
+                    old.addAll(value);
+                    return old;
+                })
+        );
+        other.nullEdges = nullEdges;
+    }
+}

+ 8 - 0
flowchart/src/main/java/xyz/ignatz/flowchart/module/INode.java

@@ -0,0 +1,8 @@
+package xyz.ignatz.flowchart.module;
+
+import java.util.Map;
+
+public interface INode {
+    String html();
+    Map<String, INode> links();
+}

+ 35 - 0
flowchart/src/main/java/xyz/ignatz/flowchart/module/Node.java

@@ -0,0 +1,35 @@
+package xyz.ignatz.flowchart.module;
+
+import org.apache.commons.lang.StringEscapeUtils;
+
+import java.util.*;
+
+public class Node implements INode {
+    String label;
+    Integer line;
+    Map<String, Node> tps;
+
+    public Node(String label, Integer line, Map<String, Node> tps) {
+        tps.remove(null);
+        this.label = label;
+        this.line = line;
+        this.tps = tps;
+    }
+
+    public boolean connect(Node dst, String label) {
+        Objects.requireNonNull(label);
+        if (tps.containsKey(label) && tps.get(label) == null) {
+            tps.put(label, dst);
+            return true;
+        }
+        return false;
+    }
+
+    public String html() {
+        return StringEscapeUtils.escapeHtml(label) + "<i><font color=\"gray\">  " + line.toString() +"</font></i>";
+    }
+
+    public Map<String, INode> links() {
+        return new HashMap<>(tps);
+    }
+}

+ 2 - 0
java9-flowchart/java9-flowchart.iml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4" />

+ 21 - 4
java9-flowchart/src/main/java/xyz/ignatz/antlr/java9/Java9FlowchartGenerator.java

@@ -1,5 +1,7 @@
 package xyz.ignatz.antlr.java9;
 
+import guru.nidi.graphviz.engine.Format;
+import guru.nidi.graphviz.engine.Graphviz;
 import org.antlr.v4.runtime.tree.ParseTree;
 import org.antlr.v4.runtime.CharStream;
 import org.antlr.v4.runtime.CharStreams;
@@ -7,9 +9,12 @@ import org.antlr.v4.runtime.CommonTokenStream;
 import xyz.ignatz.antlr.java9.recognizer.Java9Lexer;
 import xyz.ignatz.antlr.java9.recognizer.Java9FlowchartVisitor;
 import xyz.ignatz.antlr.java9.recognizer.Java9Parser;
+import xyz.ignatz.flowchart.Flowchart;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.Formatter;
+import java.util.List;
 
 public class Java9FlowchartGenerator {
     public static void main(String[] args) {
@@ -17,9 +22,11 @@ public class Java9FlowchartGenerator {
             System.out.println("JavaControlFlowGenerator input_filename output_directory");
             return;
         }
+        String inputFileName = args[0];
+        String outputDirectory = args[1];
         CharStream input = null;
         try {
-            input = CharStreams.fromFileName(args[0]);
+            input = CharStreams.fromFileName(inputFileName);
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -32,8 +39,18 @@ public class Java9FlowchartGenerator {
         CommonTokenStream tokens = new CommonTokenStream(lexer);
         Java9Parser parser = new Java9Parser(tokens);
         ParseTree tree = parser.compilationUnit();
-        Java9FlowchartVisitor loader = new Java9FlowchartVisitor();
-        loader.visit(tree);
-
+        Java9FlowchartVisitor visitor = new Java9FlowchartVisitor();
+        visitor.visit(tree);
+        List<Flowchart> flowcharts = visitor.getFlowcharts();
+        for (Flowchart flowchart : flowcharts) {
+            String outputFileName = outputDirectory + '/' + flowchart.getName();
+            File file = new File(outputFileName);
+            try {
+                Graphviz.fromGraph(flowchart.graph()).render(Format.SVG).toFile(file);
+            } catch (IOException e) {
+                System.err.println("[ERROR] Output " + outputFileName + " error.");
+                e.printStackTrace();
+            }
+        }
     }
 }

+ 48 - 30
java9-flowchart/src/main/java/xyz/ignatz/antlr/java9/recognizer/Java9FlowchartVisitor.java

@@ -1,24 +1,26 @@
 package xyz.ignatz.antlr.java9.recognizer;
 
 import xyz.ignatz.antlr.java9.utils.JavaName;
-import xyz.ignatz.flowchart.Block;
-import xyz.ignatz.flowchart.Node;
+import xyz.ignatz.flowchart.Flowchart;
+import xyz.ignatz.flowchart.module.Block;
+import xyz.ignatz.flowchart.module.Node;
 
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
-import xyz.ignatz.antlr.utils.Blocks;
+import xyz.ignatz.antlr.java9.utils.Blocks;
 
 
 public class Java9FlowchartVisitor extends Java9BaseVisitor<Block> {
-    Map<String, Block> blocks;
+    List<Flowchart> flowcharts = new ArrayList<>();
     JavaName name = new JavaName();
 
+    public List<Flowchart> getFlowcharts() {
+        return new ArrayList<>(flowcharts);
+    }
+
     @Override
     protected Block aggregateResult(Block block, Block next) {
         if (block == null) return next;
-        if (next == null) return block;
         block.connect(next);
         return block;
     }
@@ -27,7 +29,8 @@ public class Java9FlowchartVisitor extends Java9BaseVisitor<Block> {
     public Block visitIfThenStatement(Java9Parser.IfThenStatementContext ctx) {
         Block body = visitStatement(ctx.statement());
         Block block = Blocks.buildJudgement(ctx.expression());
-        block.connect("true", body);
+        block.connect(body, "true");
+        block.modifyTpType("false", "");
         return block;
     }
 
@@ -36,8 +39,8 @@ public class Java9FlowchartVisitor extends Java9BaseVisitor<Block> {
         Block bodyTrue = visitStatementNoShortIf(ctx.statementNoShortIf());
         Block bodyFalse = visitStatement(ctx.statement());
         Block block = Blocks.buildJudgement(ctx.expression());
-        block.connect("true", bodyTrue);
-        block.connect("false", bodyFalse);
+        block.connect(bodyTrue, "true");
+        block.connect(bodyFalse, "false");
         return block;
     }
 
@@ -46,8 +49,8 @@ public class Java9FlowchartVisitor extends Java9BaseVisitor<Block> {
         Block bodyTrue = visitStatementNoShortIf(ctx.statementNoShortIf().get(0));
         Block bodyFalse = visitStatementNoShortIf(ctx.statementNoShortIf().get(1));
         Block block = Blocks.buildJudgement(ctx.expression());
-        block.connect("true", bodyTrue);
-        block.connect("false", bodyFalse);
+        block.connect(bodyTrue, "true");
+        block.connect(bodyFalse, "false");
         return block;
     }
 
@@ -61,8 +64,9 @@ public class Java9FlowchartVisitor extends Java9BaseVisitor<Block> {
             group.switchLabels().switchLabel().forEach(lab -> map.put(lab.getText(), start));
             body = aggregateResult(body, block);
         }
-        Block block = Blocks.build(ctx, map);
+        Block block = Blocks.build("switch (" + ctx.expression().getText() + ")", ctx.getStart().getLine(), map);
         block.connect(body);
+        block.modifyTpType("break", "");
         return block;
     }
 
@@ -76,26 +80,24 @@ public class Java9FlowchartVisitor extends Java9BaseVisitor<Block> {
 
     @Override
     public Block visitBasicForStatement(Java9Parser.BasicForStatementContext ctx) {
-        Block init = visitForInit(ctx.forInit());
-        Block judge = Blocks.buildJudgement(ctx.expression());
-        Block update = visitForUpdate(ctx.forUpdate());
+        Block init = Blocks.build(ctx.forInit());
+        Block judge = Blocks.buildJudgement(ctx.expression(), ctx.getStart().getLine());
+        Block update = Blocks.build(ctx.forUpdate());
         Block body = visitStatement(ctx.statement());
         body.connect(update);
         body.connectLoopJudgement(judge, true);
-        init.connect(body);
-        return init;
+        return aggregateResult(init, body);
     }
 
     @Override
     public Block visitBasicForStatementNoShortIf(Java9Parser.BasicForStatementNoShortIfContext ctx) {
-        Block block = visitForInit(ctx.forInit());
-        Block judge = Blocks.buildJudgement(ctx.expression());
+        Block init = Blocks.build(ctx.forInit());
+        Block judge = Blocks.buildJudgement(ctx.expression(), ctx.getStart().getLine());
         Block update = visitForUpdate(ctx.forUpdate());
         Block body = visitStatementNoShortIf(ctx.statementNoShortIf());
         body.connect(update);
         body.connectLoopJudgement(judge, true);
-        block.connect(body);
-        return block;
+        return aggregateResult(init, body);
     }
 
     @Override
@@ -149,17 +151,21 @@ public class Java9FlowchartVisitor extends Java9BaseVisitor<Block> {
     @Override
     public Block visitMethodDeclaration(Java9Parser.MethodDeclarationContext ctx) {
         name.push('#', ctx.methodHeader().methodDeclarator().identifier().getText());
-        String blockName = name.toString();
-        Block block = Blocks.build(ctx);
+        Block block = Blocks.build(name.toString(), ctx.getStart().getLine());
         Block body = visitMethodBody(ctx.methodBody());
         block.connect(body);
-        blocks.put(blockName, block);
+        flowcharts.add(new Flowchart(name.toString(), block));
         name.pop('#');
         return null;
     }
 
     @Override
-    public Block visitLocalVariableDeclarationStatement(Java9Parser.LocalVariableDeclarationStatementContext ctx) {
+    public Block visitLocalVariableDeclaration(Java9Parser.LocalVariableDeclarationContext ctx) {
+        return Blocks.build(ctx);
+    }
+
+    @Override
+    public Block visitStatementExpressionList(Java9Parser.StatementExpressionListContext ctx) {
         return Blocks.build(ctx);
     }
 
@@ -175,19 +181,31 @@ public class Java9FlowchartVisitor extends Java9BaseVisitor<Block> {
 
     @Override
     public Block visitAssertStatement(Java9Parser.AssertStatementContext ctx) {
-        return Blocks.build(ctx, Arrays.asList(null, "assert failed"));
+        List<Java9Parser.ExpressionContext> exp = ctx.expression();
+        Block judge = Blocks.buildJudgement(exp.get(0));
+        String info = exp.size() == 1 ? "assert !(" + exp.get(0).getText() + ")" : "assert " + exp.get(1).getText();
+        Block ast  = Blocks.build(info, ctx.start.getLine(), "assert failed");
+        judge.modifyTpType("true", "");
+        judge.connect(ast, "false");
+        return judge;
         // TODO: assertStatement
     }
 
     @Override
     public Block visitBreakStatement(Java9Parser.BreakStatementContext ctx) {
-        return Blocks.build(ctx, "break");
+        String label = ctx.identifier() == null ? "" : ctx.identifier().getText();
+        Block block = Blocks.build(ctx, label);
+        block.modifyTpType(label, "break");
+        return block;
         // TODO: break label
     }
 
     @Override
     public Block visitContinueStatement(Java9Parser.ContinueStatementContext ctx) {
-        return Blocks.build(ctx, "continue");
+        String label = ctx.identifier() == null ? "" : ctx.identifier().getText();
+        Block block = Blocks.build(ctx, label);
+        block.modifyTpType(label, "continue");
+        return block;
         // TODO: continue label
     }
 

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

@@ -0,0 +1,8 @@
+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


+ 659 - 0
output/flowchart/Person#main.svg

@@ -0,0 +1,659 @@
+<svg width="1171px" height="1659px"
+ viewBox="0.00 0.00 1170.54 1659.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1.0 1.0) rotate(0.0) translate(4.0 1655.0)">
+<title>Person#main</title>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-1655 1166.54,-1655 1166.54,4 -4,4"/>
+<!-- END -->
+<g id="node1" class="node">
+<title>END</title>
+<path fill="none" stroke="black" d="M50,-109C50,-109 20,-109 20,-109 14,-109 8,-103 8,-97 8,-97 8,-85 8,-85 8,-79 14,-73 20,-73 20,-73 50,-73 50,-73 56,-73 62,-79 62,-85 62,-85 62,-97 62,-97 62,-103 56,-109 50,-109"/>
+<text text-anchor="middle" x="35" y="-86.8" font-family="Times,serif" font-size="14.00">END</text>
+</g>
+<!-- System.out.println(&quot;234&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;15&lt;/font&gt;&lt;/i&gt; -->
+<g id="node2" class="node">
+<title>System.out.println(&quot;234&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;15&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="1014.08,-1000.4 827.92,-1000.4 827.92,-964.4 1014.08,-964.4 1014.08,-1000.4"/>
+<text text-anchor="start" x="835.96" y="-979.2" font-family="Times,serif" font-size="14.00">System.out.println(&quot;234&quot;);</text>
+<text text-anchor="start" x="985.04" y="-979.2" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;15</text>
+</g>
+<!-- System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;16&lt;/font&gt;&lt;/i&gt; -->
+<g id="node3" class="node">
+<title>System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;16&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="1014.08,-911.6 827.92,-911.6 827.92,-875.6 1014.08,-875.6 1014.08,-911.6"/>
+<text text-anchor="start" x="835.96" y="-890.4" font-family="Times,serif" font-size="14.00">System.out.println(&quot;456&quot;);</text>
+<text text-anchor="start" x="985.04" y="-890.4" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;16</text>
+</g>
+<!-- System.out.println(&quot;234&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;15&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;16&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge1" class="edge">
+<title>System.out.println(&quot;234&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;15&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;16&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M921,-964.25C921,-952.12 921,-935.62 921,-921.72"/>
+<polygon fill="black" stroke="black" points="924.5,-921.71 921,-911.71 917.5,-921.71 924.5,-921.71"/>
+</g>
+<!-- i++&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt; -->
+<g id="node4" class="node">
+<title>i++&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="1039.18,-838.6 982.82,-838.6 982.82,-802.6 1039.18,-802.6 1039.18,-838.6"/>
+<text text-anchor="start" x="990.66" y="-817.4" font-family="Times,serif" font-size="14.00">i++</text>
+<text text-anchor="start" x="1010.34" y="-817.4" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;13</text>
+</g>
+<!-- System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;16&lt;/font&gt;&lt;/i&gt;&#45;&gt;i++&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge2" class="edge">
+<title>System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;16&lt;/font&gt;&lt;/i&gt;&#45;&gt;i++&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M942.79,-875.41C954.39,-866.26 968.84,-854.86 981.44,-844.92"/>
+<polygon fill="black" stroke="black" points="983.73,-847.57 989.41,-838.63 979.4,-842.07 983.73,-847.57"/>
+</g>
+<!-- i&lt;12&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt; -->
+<g id="node5" class="node">
+<title>i&lt;12&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="921,-1162.2 859.51,-1144.2 921,-1126.2 982.49,-1144.2 921,-1162.2"/>
+<text text-anchor="start" x="897.61" y="-1141" font-family="Times,serif" font-size="14.00">i&lt;12</text>
+<text text-anchor="start" x="923.39" y="-1141" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;13</text>
+</g>
+<!-- i++&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;&#45;&gt;i&lt;12&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge3" class="edge">
+<title>i++&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;&#45;&gt;i&lt;12&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M1023.25,-838.78C1031.92,-852.63 1042,-872.96 1042,-892.6 1042,-1056.4 1042,-1056.4 1042,-1056.4 1042,-1096.69 997.16,-1120.09 962.07,-1132.24"/>
+<polygon fill="black" stroke="black" points="960.9,-1128.94 952.48,-1135.37 963.07,-1135.6 960.9,-1128.94"/>
+</g>
+<!-- age = 19;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;14&lt;/font&gt;&lt;/i&gt; -->
+<g id="node6" class="node">
+<title>age = 19;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;14&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="965.71,-1073.4 876.29,-1073.4 876.29,-1037.4 965.71,-1037.4 965.71,-1073.4"/>
+<text text-anchor="start" x="884.39" y="-1052.2" font-family="Times,serif" font-size="14.00">age = 19;</text>
+<text text-anchor="start" x="936.61" y="-1052.2" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;14</text>
+</g>
+<!-- i&lt;12&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;&#45;&gt;age = 19;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;14&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge4" class="edge">
+<title>i&lt;12&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;&#45;&gt;age = 19;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;14&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M921,-1126.05C921,-1113.92 921,-1097.42 921,-1083.52"/>
+<polygon fill="black" stroke="black" points="924.5,-1083.51 921,-1073.51 917.5,-1083.51 924.5,-1083.51"/>
+<text text-anchor="middle" x="931.88" y="-1095.6" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- char i = &#39;a&#39;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;18&lt;/font&gt;&lt;/i&gt; -->
+<g id="node7" class="node">
+<title>char i = &#39;a&#39;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;18&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="835.41,-1073.4 736.59,-1073.4 736.59,-1037.4 835.41,-1037.4 835.41,-1073.4"/>
+<text text-anchor="start" x="744.54" y="-1052.2" font-family="Times,serif" font-size="14.00">char i = &#39;a&#39;</text>
+<text text-anchor="start" x="806.46" y="-1052.2" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;18</text>
+</g>
+<!-- i&lt;12&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;&#45;&gt;char i = &#39;a&#39;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;18&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge5" class="edge">
+<title>i&lt;12&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;&#45;&gt;char i = &#39;a&#39;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;18&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M902.79,-1131.49C881.97,-1118.11 847.39,-1095.87 821.25,-1079.06"/>
+<polygon fill="black" stroke="black" points="823.04,-1076.06 812.74,-1073.59 819.26,-1081.94 823.04,-1076.06"/>
+<text text-anchor="middle" x="878.21" y="-1095.6" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- age = 19;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;14&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;234&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;15&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge6" class="edge">
+<title>age = 19;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;14&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;234&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;15&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M921,-1037.21C921,-1029.19 921,-1019.45 921,-1010.47"/>
+<polygon fill="black" stroke="black" points="924.5,-1010.43 921,-1000.43 917.5,-1010.43 924.5,-1010.43"/>
+</g>
+<!-- switch (i)&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;19&lt;/font&gt;&lt;/i&gt; -->
+<g id="node8" class="node">
+<title>switch (i)&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;19&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="717,-1000.4 628.91,-982.4 717,-964.4 805.09,-982.4 717,-1000.4"/>
+<text text-anchor="start" x="679.87" y="-979.2" font-family="Times,serif" font-size="14.00">switch (i)</text>
+<text text-anchor="start" x="733.13" y="-979.2" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;19</text>
+</g>
+<!-- char i = &#39;a&#39;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;18&lt;/font&gt;&lt;/i&gt;&#45;&gt;switch (i)&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;19&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge7" class="edge">
+<title>char i = &#39;a&#39;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;18&lt;/font&gt;&lt;/i&gt;&#45;&gt;switch (i)&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;19&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M769.3,-1037.21C760.02,-1027.66 748.37,-1015.68 738.42,-1005.45"/>
+<polygon fill="black" stroke="black" points="740.7,-1002.76 731.22,-998.03 735.68,-1007.64 740.7,-1002.76"/>
+</g>
+<!-- System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;21&lt;/font&gt;&lt;/i&gt; -->
+<g id="node9" class="node">
+<title>System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;21&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="810.08,-911.6 623.92,-911.6 623.92,-875.6 810.08,-875.6 810.08,-911.6"/>
+<text text-anchor="start" x="631.96" y="-890.4" font-family="Times,serif" font-size="14.00">System.out.println(&quot;123&quot;);</text>
+<text text-anchor="start" x="781.04" y="-890.4" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;21</text>
+</g>
+<!-- switch (i)&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;19&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;21&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge8" class="edge">
+<title>switch (i)&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;19&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;21&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M717,-964.25C717,-952.12 717,-935.62 717,-921.72"/>
+<polygon fill="black" stroke="black" points="720.5,-921.71 717,-911.71 713.5,-921.71 720.5,-921.71"/>
+<text text-anchor="middle" x="738.76" y="-933.8" font-family="Times,serif" font-size="14.00">case&#39;a&#39;:</text>
+</g>
+<!-- System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;24&lt;/font&gt;&lt;/i&gt; -->
+<g id="node33" class="node">
+<title>System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;24&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="606.08,-911.6 419.92,-911.6 419.92,-875.6 606.08,-875.6 606.08,-911.6"/>
+<text text-anchor="start" x="427.96" y="-890.4" font-family="Times,serif" font-size="14.00">System.out.println(&quot;456&quot;);</text>
+<text text-anchor="start" x="577.04" y="-890.4" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;24</text>
+</g>
+<!-- switch (i)&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;19&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;24&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge9" class="edge">
+<title>switch (i)&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;19&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;24&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M689.91,-969.87C657.5,-956.08 602.6,-932.73 562.54,-915.68"/>
+<polygon fill="black" stroke="black" points="563.78,-912.4 553.21,-911.71 561.04,-918.85 563.78,-912.4"/>
+<text text-anchor="middle" x="655.15" y="-933.8" font-family="Times,serif" font-size="14.00">case&#39;b&#39;:</text>
+</g>
+<!-- break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;22&lt;/font&gt;&lt;/i&gt; -->
+<g id="node10" class="node">
+<title>break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;22&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="717.98,-838.6 646.02,-838.6 646.02,-802.6 717.98,-802.6 717.98,-838.6"/>
+<text text-anchor="start" x="654.01" y="-817.4" font-family="Times,serif" font-size="14.00">break;</text>
+<text text-anchor="start" x="688.99" y="-817.4" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;22</text>
+</g>
+<!-- System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;21&lt;/font&gt;&lt;/i&gt;&#45;&gt;break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;22&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge10" class="edge">
+<title>System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;21&lt;/font&gt;&lt;/i&gt;&#45;&gt;break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;22&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M708.53,-875.41C704.44,-867.13 699.46,-857.01 694.91,-847.79"/>
+<polygon fill="black" stroke="black" points="697.96,-846.05 690.39,-838.63 691.68,-849.15 697.96,-846.05"/>
+</g>
+<!-- age*=2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;29&lt;/font&gt;&lt;/i&gt; -->
+<g id="node11" class="node">
+<title>age*=2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;29&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="618.21,-749.8 535.79,-749.8 535.79,-713.8 618.21,-713.8 618.21,-749.8"/>
+<text text-anchor="start" x="543.89" y="-728.6" font-family="Times,serif" font-size="14.00">age*=2;</text>
+<text text-anchor="start" x="589.11" y="-728.6" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;29</text>
+</g>
+<!-- break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;22&lt;/font&gt;&lt;/i&gt;&#45;&gt;age*=2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;29&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge11" class="edge">
+<title>break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;22&lt;/font&gt;&lt;/i&gt;&#45;&gt;age*=2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;29&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M661.26,-802.45C645.29,-789.25 623.06,-770.87 605.43,-756.31"/>
+<polygon fill="black" stroke="black" points="607.64,-753.59 597.7,-749.91 603.18,-758.98 607.64,-753.59"/>
+</g>
+<!-- age &lt; 30&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;30&lt;/font&gt;&lt;/i&gt; -->
+<g id="node12" class="node">
+<title>age &lt; 30&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;30&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="441,-838.6 357.53,-820.6 441,-802.6 524.47,-820.6 441,-838.6"/>
+<text text-anchor="start" x="406.34" y="-817.4" font-family="Times,serif" font-size="14.00">age &lt; 30</text>
+<text text-anchor="start" x="454.66" y="-817.4" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;30</text>
+</g>
+<!-- age*=2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;29&lt;/font&gt;&lt;/i&gt;&#45;&gt;age &lt; 30&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;30&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge12" class="edge">
+<title>age*=2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;29&lt;/font&gt;&lt;/i&gt;&#45;&gt;age &lt; 30&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;30&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M543.1,-749.93C532.93,-755.36 521.87,-761.58 512,-767.8 496.33,-777.67 479.55,-789.83 466.24,-799.89"/>
+<polygon fill="black" stroke="black" points="463.87,-797.3 458.05,-806.15 468.12,-802.86 463.87,-797.3"/>
+</g>
+<!-- age &lt; 30&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;30&lt;/font&gt;&lt;/i&gt;&#45;&gt;age*=2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;29&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge13" class="edge">
+<title>age &lt; 30&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;30&lt;/font&gt;&lt;/i&gt;&#45;&gt;age*=2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;29&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M467.36,-808.25C481.05,-801.95 497.84,-793.58 512,-784.6 525.14,-776.26 538.74,-765.76 550.08,-756.39"/>
+<polygon fill="black" stroke="black" points="552.5,-758.93 557.91,-749.82 548,-753.57 552.5,-758.93"/>
+<text text-anchor="middle" x="545.88" y="-772" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt; -->
+<g id="node13" class="node">
+<title>age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="441,-749.8 364.69,-731.8 441,-713.8 517.31,-731.8 441,-749.8"/>
+<text text-anchor="start" x="409.84" y="-728.6" font-family="Times,serif" font-size="14.00">age&gt;10</text>
+<text text-anchor="start" x="451.16" y="-728.6" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;33</text>
+</g>
+<!-- age &lt; 30&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;30&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge14" class="edge">
+<title>age &lt; 30&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;30&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M441,-802.45C441,-790.32 441,-773.82 441,-759.92"/>
+<polygon fill="black" stroke="black" points="444.5,-759.91 441,-749.91 437.5,-759.91 444.5,-759.91"/>
+<text text-anchor="middle" x="454.21" y="-772" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;&#45;&gt;END -->
+<g id="edge16" class="edge">
+<title>age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;&#45;&gt;END</title>
+<path fill="none" stroke="black" d="M366.69,-731.23C241.01,-729.94 0,-717.84 0,-644 0,-644 0,-644 0,-198 0,-169.73 11.37,-139.25 21.15,-118.27"/>
+<polygon fill="black" stroke="black" points="24.4,-119.58 25.62,-109.06 18.1,-116.52 24.4,-119.58"/>
+<text text-anchor="middle" x="13.21" y="-416.8" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- age%3==2&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;34&lt;/font&gt;&lt;/i&gt; -->
+<g id="node14" class="node">
+<title>age%3==2&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;34&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="281,-661 185.54,-643 281,-625 376.46,-643 281,-661"/>
+<text text-anchor="start" x="240.06" y="-639.8" font-family="Times,serif" font-size="14.00">age%3==2</text>
+<text text-anchor="start" x="300.94" y="-639.8" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;34</text>
+</g>
+<!-- age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;&#45;&gt;age%3==2&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;34&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge15" class="edge">
+<title>age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;&#45;&gt;age%3==2&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;34&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M416.14,-719.5C401.96,-712.89 383.93,-704.21 368.23,-695.8 348.72,-685.34 327.33,-672.66 310.62,-662.46"/>
+<polygon fill="black" stroke="black" points="312.21,-659.33 301.86,-657.08 308.55,-665.3 312.21,-659.33"/>
+<text text-anchor="middle" x="379.88" y="-683.2" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- age += 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;36&lt;/font&gt;&lt;/i&gt; -->
+<g id="node15" class="node">
+<title>age += 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;36&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="188.11,-572.2 97.89,-572.2 97.89,-536.2 188.11,-536.2 188.11,-572.2"/>
+<text text-anchor="start" x="105.95" y="-551" font-family="Times,serif" font-size="14.00">age += 2;</text>
+<text text-anchor="start" x="159.05" y="-551" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;36</text>
+</g>
+<!-- age%3==2&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;34&lt;/font&gt;&lt;/i&gt;&#45;&gt;age += 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;36&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge17" class="edge">
+<title>age%3==2&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;34&lt;/font&gt;&lt;/i&gt;&#45;&gt;age += 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;36&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M260.04,-628.82C238.59,-615.33 204.85,-594.1 179.09,-577.9"/>
+<polygon fill="black" stroke="black" points="180.68,-574.76 170.35,-572.4 176.95,-580.69 180.68,-574.76"/>
+<text text-anchor="middle" x="235.88" y="-594.4" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- age == 4&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt; -->
+<g id="node26" class="node">
+<title>age == 4&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="290,-572.2 205.79,-554.2 290,-536.2 374.21,-554.2 290,-572.2"/>
+<text text-anchor="start" x="254.89" y="-551" font-family="Times,serif" font-size="14.00">age == 4</text>
+<text text-anchor="start" x="304.11" y="-551" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;48</text>
+</g>
+<!-- age%3==2&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;34&lt;/font&gt;&lt;/i&gt;&#45;&gt;age == 4&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge18" class="edge">
+<title>age%3==2&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;34&lt;/font&gt;&lt;/i&gt;&#45;&gt;age == 4&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M282.74,-625.26C284.01,-613.02 285.75,-596.14 287.22,-582.02"/>
+<polygon fill="black" stroke="black" points="290.72,-582.19 288.27,-571.88 283.76,-581.47 290.72,-582.19"/>
+<text text-anchor="middle" x="300.21" y="-594.4" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- age &gt;= 100&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;37&lt;/font&gt;&lt;/i&gt; -->
+<g id="node16" class="node">
+<title>age &gt;= 100&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;37&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="258,-483.4 160.47,-465.4 258,-447.4 355.53,-465.4 258,-483.4"/>
+<text text-anchor="start" x="215.89" y="-462.2" font-family="Times,serif" font-size="14.00">age &gt;= 100</text>
+<text text-anchor="start" x="279.11" y="-462.2" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;37</text>
+</g>
+<!-- age += 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;36&lt;/font&gt;&lt;/i&gt;&#45;&gt;age &gt;= 100&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;37&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge19" class="edge">
+<title>age += 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;36&lt;/font&gt;&lt;/i&gt;&#45;&gt;age &gt;= 100&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;37&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M165.72,-536.05C184.74,-521.7 211.88,-501.21 231.81,-486.17"/>
+<polygon fill="black" stroke="black" points="233.99,-488.91 239.86,-480.09 229.77,-483.32 233.99,-488.91"/>
+</g>
+<!-- break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;38&lt;/font&gt;&lt;/i&gt; -->
+<g id="node17" class="node">
+<title>break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;38&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="420.98,-394.6 349.02,-394.6 349.02,-358.6 420.98,-358.6 420.98,-394.6"/>
+<text text-anchor="start" x="357.01" y="-373.4" font-family="Times,serif" font-size="14.00">break;</text>
+<text text-anchor="start" x="391.99" y="-373.4" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;38</text>
+</g>
+<!-- age &gt;= 100&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;37&lt;/font&gt;&lt;/i&gt;&#45;&gt;break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;38&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge20" class="edge">
+<title>age &gt;= 100&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;37&lt;/font&gt;&lt;/i&gt;&#45;&gt;break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;38&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M277.84,-450.84C297.6,-437.33 328.29,-416.36 351.77,-400.31"/>
+<polygon fill="black" stroke="black" points="353.78,-403.18 360.06,-394.65 349.83,-397.4 353.78,-403.18"/>
+<text text-anchor="middle" x="343.88" y="-416.8" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- age &lt;= 50&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;39&lt;/font&gt;&lt;/i&gt; -->
+<g id="node18" class="node">
+<title>age &lt;= 50&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;39&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="240,-394.6 149.13,-376.6 240,-358.6 330.87,-376.6 240,-394.6"/>
+<text text-anchor="start" x="201.39" y="-373.4" font-family="Times,serif" font-size="14.00">age &lt;= 50</text>
+<text text-anchor="start" x="257.61" y="-373.4" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;39</text>
+</g>
+<!-- age &gt;= 100&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;37&lt;/font&gt;&lt;/i&gt;&#45;&gt;age &lt;= 50&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;39&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge21" class="edge">
+<title>age &gt;= 100&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;37&lt;/font&gt;&lt;/i&gt;&#45;&gt;age &lt;= 50&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;39&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M254.53,-447.66C251.97,-435.34 248.45,-418.33 245.51,-404.15"/>
+<polygon fill="black" stroke="black" points="248.86,-403.07 243.4,-393.99 242,-404.49 248.86,-403.07"/>
+<text text-anchor="middle" x="264.21" y="-416.8" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;38&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge22" class="edge">
+<title>break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;38&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M391.01,-394.65C396.58,-411.98 404,-439.72 404,-464.4 404,-644 404,-644 404,-644 404,-666.94 415.08,-690.76 425.11,-707.63"/>
+<polygon fill="black" stroke="black" points="422.22,-709.62 430.5,-716.24 428.16,-705.91 422.22,-709.62"/>
+</g>
+<!-- age != 24&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt; -->
+<g id="node19" class="node">
+<title>age != 24&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="240,-305.8 152.44,-287.8 240,-269.8 327.56,-287.8 240,-305.8"/>
+<text text-anchor="start" x="203.01" y="-284.6" font-family="Times,serif" font-size="14.00">age != 24</text>
+<text text-anchor="start" x="255.99" y="-284.6" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;40</text>
+</g>
+<!-- age &lt;= 50&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;39&lt;/font&gt;&lt;/i&gt;&#45;&gt;age != 24&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge23" class="edge">
+<title>age &lt;= 50&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;39&lt;/font&gt;&lt;/i&gt;&#45;&gt;age != 24&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M240,-358.45C240,-346.32 240,-329.82 240,-315.92"/>
+<polygon fill="black" stroke="black" points="243.5,-315.91 240,-305.91 236.5,-315.91 243.5,-315.91"/>
+<text text-anchor="middle" x="250.88" y="-328" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- age /= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;44&lt;/font&gt;&lt;/i&gt; -->
+<g id="node24" class="node">
+<title>age /= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;44&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="432.11,-305.8 345.89,-305.8 345.89,-269.8 432.11,-269.8 432.11,-305.8"/>
+<text text-anchor="start" x="353.95" y="-284.6" font-family="Times,serif" font-size="14.00">age /= 2;</text>
+<text text-anchor="start" x="403.05" y="-284.6" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;44</text>
+</g>
+<!-- age &lt;= 50&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;39&lt;/font&gt;&lt;/i&gt;&#45;&gt;age /= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;44&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge24" class="edge">
+<title>age &lt;= 50&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;39&lt;/font&gt;&lt;/i&gt;&#45;&gt;age /= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;44&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M261.99,-362.79C285.36,-349.18 322.77,-327.38 350.95,-310.97"/>
+<polygon fill="black" stroke="black" points="352.86,-313.9 359.74,-305.85 349.34,-307.85 352.86,-313.9"/>
+<text text-anchor="middle" x="341.21" y="-328" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- age *= 3;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;41&lt;/font&gt;&lt;/i&gt; -->
+<g id="node20" class="node">
+<title>age *= 3;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;41&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="358.71,-217 269.29,-217 269.29,-181 358.71,-181 358.71,-217"/>
+<text text-anchor="start" x="277.39" y="-195.8" font-family="Times,serif" font-size="14.00">age *= 3;</text>
+<text text-anchor="start" x="329.61" y="-195.8" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;41</text>
+</g>
+<!-- age != 24&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt;&#45;&gt;age *= 3;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;41&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge25" class="edge">
+<title>age != 24&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt;&#45;&gt;age *= 3;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;41&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M252.55,-272.08C263.48,-259.26 279.55,-240.41 292.52,-225.2"/>
+<polygon fill="black" stroke="black" points="295.52,-227.07 299.35,-217.19 290.2,-222.53 295.52,-227.07"/>
+<text text-anchor="middle" x="294.88" y="-239.2" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- assert &quot;error&quot;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt; -->
+<g id="node23" class="node">
+<title>assert &quot;error&quot;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="251.49,-217 140.51,-217 140.51,-181 251.49,-181 251.49,-217"/>
+<text text-anchor="start" x="148.51" y="-195.8" font-family="Times,serif" font-size="14.00">assert &quot;error&quot;</text>
+<text text-anchor="start" x="222.49" y="-195.8" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;40</text>
+</g>
+<!-- age != 24&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt;&#45;&gt;assert &quot;error&quot;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge26" class="edge">
+<title>age != 24&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt;&#45;&gt;assert &quot;error&quot;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M232.13,-271.28C225.81,-258.8 216.78,-240.99 209.33,-226.29"/>
+<polygon fill="black" stroke="black" points="212.35,-224.51 204.7,-217.17 206.1,-227.67 212.35,-224.51"/>
+<text text-anchor="middle" x="235.21" y="-239.2" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;42&lt;/font&gt;&lt;/i&gt; -->
+<g id="node21" class="node">
+<title>continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;42&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="358.6,-109 269.4,-109 269.4,-73 358.6,-73 358.6,-109"/>
+<text text-anchor="start" x="277.45" y="-87.8" font-family="Times,serif" font-size="14.00">continue;</text>
+<text text-anchor="start" x="329.55" y="-87.8" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;42</text>
+</g>
+<!-- age *= 3;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;41&lt;/font&gt;&lt;/i&gt;&#45;&gt;continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;42&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge27" class="edge">
+<title>age *= 3;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;41&lt;/font&gt;&lt;/i&gt;&#45;&gt;continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;42&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M314,-180.97C314,-164.38 314,-138.88 314,-119.43"/>
+<polygon fill="black" stroke="black" points="317.5,-119.34 314,-109.34 310.5,-119.34 317.5,-119.34"/>
+</g>
+<!-- age &lt; 80&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;47&lt;/font&gt;&lt;/i&gt; -->
+<g id="node22" class="node">
+<title>age &lt; 80&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;47&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="369,-36 285.53,-18 369,0 452.47,-18 369,-36"/>
+<text text-anchor="start" x="334.34" y="-14.8" font-family="Times,serif" font-size="14.00">age &lt; 80</text>
+<text text-anchor="start" x="382.66" y="-14.8" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;47</text>
+</g>
+<!-- continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;42&lt;/font&gt;&lt;/i&gt;&#45;&gt;age &lt; 80&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;47&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge28" class="edge">
+<title>continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;42&lt;/font&gt;&lt;/i&gt;&#45;&gt;age &lt; 80&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;47&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M327.31,-72.81C334.57,-63.45 343.63,-51.75 351.45,-41.65"/>
+<polygon fill="black" stroke="black" points="354.31,-43.68 357.67,-33.63 348.78,-39.39 354.31,-43.68"/>
+</g>
+<!-- age &lt; 80&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;47&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge30" class="edge">
+<title>age &lt; 80&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;47&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M446.24,-19.38C549.31,-22.01 719,-34.74 719,-90 719,-644 719,-644 719,-644 719,-734.8 616.64,-699.36 527,-713.8 514.67,-715.79 501.42,-718.24 489.09,-720.67"/>
+<polygon fill="black" stroke="black" points="488.12,-717.29 479,-722.69 489.49,-724.16 488.12,-717.29"/>
+<text text-anchor="middle" x="732.21" y="-372.4" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- age &lt; 80&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;47&lt;/font&gt;&lt;/i&gt;&#45;&gt;age += 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;36&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge29" class="edge">
+<title>age &lt; 80&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;47&lt;/font&gt;&lt;/i&gt;&#45;&gt;age += 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;36&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M310.36,-23.44C234.51,-30.83 112,-49.09 112,-90 112,-244.4 112,-244.4 112,-244.4 112,-349 129.83,-472.53 138.44,-526.13"/>
+<polygon fill="black" stroke="black" points="135.02,-526.88 140.08,-536.19 141.93,-525.75 135.02,-526.88"/>
+<text text-anchor="middle" x="124.88" y="-283.6" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- assert &quot;error&quot;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt;&#45;&gt;END -->
+<g id="edge31" class="edge">
+<title>assert &quot;error&quot;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;40&lt;/font&gt;&lt;/i&gt;&#45;&gt;END</title>
+<path fill="none" stroke="black" d="M170.13,-180.97C142.87,-163.02 99.77,-134.65 69.6,-114.78"/>
+<polygon fill="black" stroke="black" points="71.35,-111.74 61.07,-109.16 67.5,-117.59 71.35,-111.74"/>
+<text text-anchor="middle" x="173.62" y="-140.8" font-family="Times,serif" font-size="14.00">assert failed</text>
+</g>
+<!-- age *= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;46&lt;/font&gt;&lt;/i&gt; -->
+<g id="node25" class="node">
+<title>age *= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;46&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="432.71,-163 343.29,-163 343.29,-127 432.71,-127 432.71,-163"/>
+<text text-anchor="start" x="351.39" y="-141.8" font-family="Times,serif" font-size="14.00">age *= 2;</text>
+<text text-anchor="start" x="403.61" y="-141.8" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;46</text>
+</g>
+<!-- age /= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;44&lt;/font&gt;&lt;/i&gt;&#45;&gt;age *= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;46&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge32" class="edge">
+<title>age /= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;44&lt;/font&gt;&lt;/i&gt;&#45;&gt;age *= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;46&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M388.88,-269.54C388.71,-245.57 388.4,-201.98 388.2,-173.5"/>
+<polygon fill="black" stroke="black" points="391.69,-173.38 388.12,-163.41 384.69,-173.43 391.69,-173.38"/>
+</g>
+<!-- age *= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;46&lt;/font&gt;&lt;/i&gt;&#45;&gt;age &lt; 80&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;47&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge33" class="edge">
+<title>age *= 2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;46&lt;/font&gt;&lt;/i&gt;&#45;&gt;age &lt; 80&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;47&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M385.4,-126.88C382.21,-105.91 376.78,-70.16 373.04,-45.6"/>
+<polygon fill="black" stroke="black" points="376.47,-44.87 371.51,-35.51 369.55,-45.93 376.47,-44.87"/>
+</g>
+<!-- ++age;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt; -->
+<g id="node27" class="node">
+<title>++age;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="104.11,-483.4 27.89,-483.4 27.89,-447.4 104.11,-447.4 104.11,-483.4"/>
+<text text-anchor="start" x="35.95" y="-462.2" font-family="Times,serif" font-size="14.00">++age;</text>
+<text text-anchor="start" x="75.05" y="-462.2" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;48</text>
+</g>
+<!-- age == 4&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt;&#45;&gt;++age;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge34" class="edge">
+<title>age == 4&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt;&#45;&gt;++age;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M261.63,-542.21C224.45,-527.8 158.7,-502.32 113.78,-484.91"/>
+<polygon fill="black" stroke="black" points="114.83,-481.57 104.24,-481.22 112.3,-488.1 114.83,-481.57"/>
+<text text-anchor="middle" x="209.88" y="-505.6" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- age == 5&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;49&lt;/font&gt;&lt;/i&gt; -->
+<g id="node28" class="node">
+<title>age == 5&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;49&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="516,-483.4 431.79,-465.4 516,-447.4 600.21,-465.4 516,-483.4"/>
+<text text-anchor="start" x="480.89" y="-462.2" font-family="Times,serif" font-size="14.00">age == 5</text>
+<text text-anchor="start" x="530.11" y="-462.2" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;49</text>
+</g>
+<!-- age == 4&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt;&#45;&gt;age == 5&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;49&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge35" class="edge">
+<title>age == 4&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt;&#45;&gt;age == 5&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;49&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M318.62,-542.21C359.01,-526.69 432.82,-498.35 477.83,-481.06"/>
+<polygon fill="black" stroke="black" points="479.17,-484.29 487.25,-477.44 476.66,-477.76 479.17,-484.29"/>
+<text text-anchor="middle" x="437.21" y="-505.6" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- ++age;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge36" class="edge">
+<title>++age;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;48&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M66.79,-483.54C68.43,-505.35 73.48,-543.62 89,-572.2 115.51,-621.03 128.9,-633.19 177,-661 241.04,-698.03 325.09,-715.85 380.97,-724.12"/>
+<polygon fill="black" stroke="black" points="380.67,-727.61 391.07,-725.56 381.66,-720.68 380.67,-727.61"/>
+</g>
+<!-- age == 5&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;49&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge38" class="edge">
+<title>age == 5&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;49&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M511.39,-482.67C498.79,-527.07 463.74,-650.63 448.38,-704.79"/>
+<polygon fill="black" stroke="black" points="444.94,-704.08 445.58,-714.66 451.67,-705.99 444.94,-704.08"/>
+<text text-anchor="middle" x="494.21" y="-594.4" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- age == 6&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt; -->
+<g id="node29" class="node">
+<title>age == 6&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="523,-394.6 438.79,-376.6 523,-358.6 607.21,-376.6 523,-394.6"/>
+<text text-anchor="start" x="487.89" y="-373.4" font-family="Times,serif" font-size="14.00">age == 6</text>
+<text text-anchor="start" x="537.11" y="-373.4" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;50</text>
+</g>
+<!-- age == 5&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;49&lt;/font&gt;&lt;/i&gt;&#45;&gt;age == 6&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge37" class="edge">
+<title>age == 5&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;49&lt;/font&gt;&lt;/i&gt;&#45;&gt;age == 6&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M517.35,-447.66C518.33,-435.49 519.68,-418.76 520.81,-404.69"/>
+<polygon fill="black" stroke="black" points="524.32,-404.83 521.63,-394.58 517.34,-404.27 524.32,-404.83"/>
+<text text-anchor="middle" x="531.88" y="-416.8" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- age += 6;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt; -->
+<g id="node30" class="node">
+<title>age += 6;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="628.11,-305.8 537.89,-305.8 537.89,-269.8 628.11,-269.8 628.11,-305.8"/>
+<text text-anchor="start" x="545.95" y="-284.6" font-family="Times,serif" font-size="14.00">age += 6;</text>
+<text text-anchor="start" x="599.05" y="-284.6" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;50</text>
+</g>
+<!-- age == 6&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt;&#45;&gt;age += 6;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge39" class="edge">
+<title>age == 6&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt;&#45;&gt;age += 6;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M533.45,-360.48C542.26,-347.73 555.06,-329.21 565.45,-314.2"/>
+<polygon fill="black" stroke="black" points="568.42,-316.04 571.23,-305.83 562.67,-312.06 568.42,-316.04"/>
+<text text-anchor="middle" x="569.88" y="-328" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- age&#45;&#45;;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;52&lt;/font&gt;&lt;/i&gt; -->
+<g id="node31" class="node">
+<title>age&#45;&#45;;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;52&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="519.64,-305.8 450.36,-305.8 450.36,-269.8 519.64,-269.8 519.64,-305.8"/>
+<text text-anchor="start" x="458.18" y="-284.6" font-family="Times,serif" font-size="14.00">age&#45;&#45;;</text>
+<text text-anchor="start" x="490.82" y="-284.6" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;52</text>
+</g>
+<!-- age == 6&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&#45;&#45;;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;52&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge40" class="edge">
+<title>age == 6&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&#45;&#45;;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;52&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M516.03,-359.68C510.6,-347.27 502.94,-329.78 496.59,-315.27"/>
+<polygon fill="black" stroke="black" points="499.66,-313.56 492.45,-305.81 493.25,-316.37 499.66,-313.56"/>
+<text text-anchor="middle" x="521.21" y="-328" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- age += 6;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge41" class="edge">
+<title>age += 6;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;50&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M619.09,-305.85C644.13,-320.46 673,-344.12 673,-375.6 673,-644 673,-644 673,-644 673,-669.37 669.33,-680.61 649,-695.8 605.09,-728.61 581.01,-704.48 527,-713.8 514.81,-715.9 501.7,-718.38 489.48,-720.79"/>
+<polygon fill="black" stroke="black" points="488.58,-717.4 479.46,-722.78 489.95,-724.26 488.58,-717.4"/>
+</g>
+<!-- continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;53&lt;/font&gt;&lt;/i&gt; -->
+<g id="node32" class="node">
+<title>continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;53&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="646.6,-217 557.4,-217 557.4,-181 646.6,-181 646.6,-217"/>
+<text text-anchor="start" x="565.45" y="-195.8" font-family="Times,serif" font-size="14.00">continue;</text>
+<text text-anchor="start" x="617.55" y="-195.8" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;53</text>
+</g>
+<!-- age&#45;&#45;;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;52&lt;/font&gt;&lt;/i&gt;&#45;&gt;continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;53&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge42" class="edge">
+<title>age&#45;&#45;;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;52&lt;/font&gt;&lt;/i&gt;&#45;&gt;continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;53&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M508.12,-269.65C526.06,-256.34 551.13,-237.74 570.85,-223.11"/>
+<polygon fill="black" stroke="black" points="572.99,-225.88 578.93,-217.11 568.82,-220.26 572.99,-225.88"/>
+</g>
+<!-- continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;53&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge43" class="edge">
+<title>continue;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;53&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;33&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M613.48,-217.2C621.85,-230.82 632.47,-250.67 637,-269.8 652.38,-334.77 635,-353.24 635,-420 635,-644 635,-644 635,-644 635,-676.2 544.84,-704.84 487.45,-719.8"/>
+<polygon fill="black" stroke="black" points="486.31,-716.48 477.49,-722.35 488.05,-723.26 486.31,-716.48"/>
+</g>
+<!-- break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;25&lt;/font&gt;&lt;/i&gt; -->
+<g id="node34" class="node">
+<title>break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;25&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="613.98,-838.6 542.02,-838.6 542.02,-802.6 613.98,-802.6 613.98,-838.6"/>
+<text text-anchor="start" x="550.01" y="-817.4" font-family="Times,serif" font-size="14.00">break;</text>
+<text text-anchor="start" x="584.99" y="-817.4" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;25</text>
+</g>
+<!-- System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;24&lt;/font&gt;&lt;/i&gt;&#45;&gt;break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;25&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge44" class="edge">
+<title>System.out.println(&quot;456&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;24&lt;/font&gt;&lt;/i&gt;&#45;&gt;break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;25&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M528.73,-875.41C536.8,-866.6 546.76,-855.73 555.61,-846.06"/>
+<polygon fill="black" stroke="black" points="558.24,-848.37 562.41,-838.63 553.08,-843.64 558.24,-848.37"/>
+</g>
+<!-- break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;25&lt;/font&gt;&lt;/i&gt;&#45;&gt;age*=2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;29&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge45" class="edge">
+<title>break;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;25&lt;/font&gt;&lt;/i&gt;&#45;&gt;age*=2;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;29&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M577.8,-802.45C577.66,-790.32 577.47,-773.82 577.31,-759.92"/>
+<polygon fill="black" stroke="black" points="580.81,-759.87 577.2,-749.91 573.81,-759.95 580.81,-759.87"/>
+</g>
+<!-- age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;4&lt;/font&gt;&lt;/i&gt; -->
+<g id="node35" class="node">
+<title>age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;4&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="886,-1505 816.35,-1487 886,-1469 955.65,-1487 886,-1505"/>
+<text text-anchor="start" x="858.34" y="-1483.8" font-family="Times,serif" font-size="14.00">age&gt;10</text>
+<text text-anchor="start" x="899.66" y="-1483.8" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;4</text>
+</g>
+<!-- System.out.println(&quot;&#24180;&#40836;&#22826;&#22823;&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;5&lt;/font&gt;&lt;/i&gt; -->
+<g id="node36" class="node">
+<title>System.out.println(&quot;&#24180;&#40836;&#22826;&#22823;&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;5&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="954.79,-1362.2 741.21,-1362.2 741.21,-1326.2 954.79,-1326.2 954.79,-1362.2"/>
+<text text-anchor="start" x="749.36" y="-1341" font-family="Times,serif" font-size="14.00">System.out.println(&quot;年龄太大&quot;);</text>
+<text text-anchor="start" x="932.64" y="-1341" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;5</text>
+</g>
+<!-- age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;4&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;&#24180;&#40836;&#22826;&#22823;&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;5&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge46" class="edge">
+<title>age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;4&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;&#24180;&#40836;&#22826;&#22823;&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;5&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M881.64,-1469.85C875.22,-1446.05 863.13,-1401.25 855.32,-1372.34"/>
+<polygon fill="black" stroke="black" points="858.65,-1371.22 852.66,-1362.48 851.89,-1373.04 858.65,-1371.22"/>
+<text text-anchor="middle" x="886.88" y="-1438.4" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- age&gt;20&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;7&lt;/font&gt;&lt;/i&gt; -->
+<g id="node38" class="node">
+<title>age&gt;20&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;7&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="978,-1416.2 908.35,-1398.2 978,-1380.2 1047.65,-1398.2 978,-1416.2"/>
+<text text-anchor="start" x="950.34" y="-1395" font-family="Times,serif" font-size="14.00">age&gt;20</text>
+<text text-anchor="start" x="991.66" y="-1395" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;7</text>
+</g>
+<!-- age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;4&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;20&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;7&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge47" class="edge">
+<title>age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;4&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;20&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;7&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M900.38,-1472.44C915.36,-1458.3 939.03,-1435.96 956.3,-1419.68"/>
+<polygon fill="black" stroke="black" points="958.85,-1422.08 963.73,-1412.67 954.05,-1416.98 958.85,-1422.08"/>
+<text text-anchor="middle" x="953.21" y="-1438.4" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- int i =0&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt; -->
+<g id="node37" class="node">
+<title>int i =0&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="959.57,-1235.2 882.43,-1235.2 882.43,-1199.2 959.57,-1199.2 959.57,-1235.2"/>
+<text text-anchor="start" x="890.22" y="-1214" font-family="Times,serif" font-size="14.00">int i =0</text>
+<text text-anchor="start" x="930.78" y="-1214" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;13</text>
+</g>
+<!-- System.out.println(&quot;&#24180;&#40836;&#22826;&#22823;&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;5&lt;/font&gt;&lt;/i&gt;&#45;&gt;int i =0&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge48" class="edge">
+<title>System.out.println(&quot;&#24180;&#40836;&#22826;&#22823;&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;5&lt;/font&gt;&lt;/i&gt;&#45;&gt;int i =0&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M850.01,-1326.18C852.36,-1311.17 857.24,-1289.11 867,-1272.2 873.37,-1261.17 882.56,-1250.81 891.57,-1242.17"/>
+<polygon fill="black" stroke="black" points="894.01,-1244.68 899.02,-1235.34 889.28,-1239.52 894.01,-1244.68"/>
+</g>
+<!-- int i =0&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;&#45;&gt;i&lt;12&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge49" class="edge">
+<title>int i =0&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;&#45;&gt;i&lt;12&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M921,-1199.01C921,-1190.99 921,-1181.25 921,-1172.27"/>
+<polygon fill="black" stroke="black" points="924.5,-1172.23 921,-1162.23 917.5,-1172.23 924.5,-1172.23"/>
+</g>
+<!-- System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;8&lt;/font&gt;&lt;/i&gt; -->
+<g id="node39" class="node">
+<title>System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;8&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="1162.58,-1308.2 983.42,-1308.2 983.42,-1272.2 1162.58,-1272.2 1162.58,-1308.2"/>
+<text text-anchor="start" x="991.46" y="-1287" font-family="Times,serif" font-size="14.00">System.out.println(&quot;123&quot;);</text>
+<text text-anchor="start" x="1140.54" y="-1287" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;8</text>
+</g>
+<!-- age&gt;20&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;7&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;8&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge50" class="edge">
+<title>age&gt;20&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;7&lt;/font&gt;&lt;/i&gt;&#45;&gt;System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;8&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M990.42,-1383.34C1005.76,-1366.22 1032.13,-1336.8 1050.95,-1315.81"/>
+<polygon fill="black" stroke="black" points="1053.68,-1318 1057.75,-1308.22 1048.47,-1313.33 1053.68,-1318"/>
+<text text-anchor="middle" x="1049.88" y="-1340" font-family="Times,serif" font-size="14.00">true</text>
+</g>
+<!-- age = 18;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;11&lt;/font&gt;&lt;/i&gt; -->
+<g id="node40" class="node">
+<title>age = 18;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;11&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="965.71,-1308.2 876.29,-1308.2 876.29,-1272.2 965.71,-1272.2 965.71,-1308.2"/>
+<text text-anchor="start" x="884.39" y="-1287" font-family="Times,serif" font-size="14.00">age = 18;</text>
+<text text-anchor="start" x="936.61" y="-1287" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;11</text>
+</g>
+<!-- age&gt;20&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;7&lt;/font&gt;&lt;/i&gt;&#45;&gt;age = 18;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;11&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge51" class="edge">
+<title>age&gt;20&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;7&lt;/font&gt;&lt;/i&gt;&#45;&gt;age = 18;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;11&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M975.25,-1380.76C972.22,-1365.74 966.33,-1343.33 956,-1326.2 953.8,-1322.56 951.15,-1319.02 948.29,-1315.67"/>
+<polygon fill="black" stroke="black" points="950.77,-1313.2 941.39,-1308.27 945.65,-1317.97 950.77,-1313.2"/>
+<text text-anchor="middle" x="983.21" y="-1340" font-family="Times,serif" font-size="14.00">false</text>
+</g>
+<!-- System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;8&lt;/font&gt;&lt;/i&gt;&#45;&gt;int i =0&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge52" class="edge">
+<title>System.out.println(&quot;123&quot;);&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;8&lt;/font&gt;&lt;/i&gt;&#45;&gt;int i =0&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M1036.59,-1272.19C1015.69,-1262.43 989.24,-1250.08 966.92,-1239.65"/>
+<polygon fill="black" stroke="black" points="968.18,-1236.37 957.64,-1235.31 965.22,-1242.72 968.18,-1236.37"/>
+</g>
+<!-- age = 18;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;11&lt;/font&gt;&lt;/i&gt;&#45;&gt;int i =0&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge53" class="edge">
+<title>age = 18;&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;11&lt;/font&gt;&lt;/i&gt;&#45;&gt;int i =0&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;13&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M921,-1272.01C921,-1263.99 921,-1254.25 921,-1245.27"/>
+<polygon fill="black" stroke="black" points="924.5,-1245.23 921,-1235.23 917.5,-1245.23 924.5,-1245.23"/>
+</g>
+<!-- Person#main&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;2&lt;/font&gt;&lt;/i&gt; -->
+<g id="node41" class="node">
+<title>Person#main&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;2&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M925.6,-1651C925.6,-1651 846.4,-1651 846.4,-1651 840.4,-1651 834.4,-1645 834.4,-1639 834.4,-1639 834.4,-1627 834.4,-1627 834.4,-1621 840.4,-1615 846.4,-1615 846.4,-1615 925.6,-1615 925.6,-1615 931.6,-1615 937.6,-1621 937.6,-1627 937.6,-1627 937.6,-1639 937.6,-1639 937.6,-1645 931.6,-1651 925.6,-1651"/>
+<text text-anchor="start" x="842.45" y="-1629.8" font-family="Times,serif" font-size="14.00">Person#main</text>
+<text text-anchor="start" x="915.55" y="-1629.8" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;2</text>
+</g>
+<!-- int age = 10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;3&lt;/font&gt;&lt;/i&gt; -->
+<g id="node42" class="node">
+<title>int age = 10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;3&lt;/font&gt;&lt;/i&gt;</title>
+<polygon fill="none" stroke="black" points="934.11,-1578 837.89,-1578 837.89,-1542 934.11,-1542 934.11,-1578"/>
+<text text-anchor="start" x="845.7" y="-1556.8" font-family="Times,serif" font-size="14.00">int age = 10</text>
+<text text-anchor="start" x="912.3" y="-1556.8" font-family="Times,serif" font-style="italic" font-size="14.00" fill="gray"> &#160;3</text>
+</g>
+<!-- Person#main&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;2&lt;/font&gt;&lt;/i&gt;&#45;&gt;int age = 10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;3&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge54" class="edge">
+<title>Person#main&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;2&lt;/font&gt;&lt;/i&gt;&#45;&gt;int age = 10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;3&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M886,-1614.81C886,-1606.79 886,-1597.05 886,-1588.07"/>
+<polygon fill="black" stroke="black" points="889.5,-1588.03 886,-1578.03 882.5,-1588.03 889.5,-1588.03"/>
+</g>
+<!-- int age = 10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;3&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;4&lt;/font&gt;&lt;/i&gt; -->
+<g id="edge55" class="edge">
+<title>int age = 10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;3&lt;/font&gt;&lt;/i&gt;&#45;&gt;age&gt;10&lt;i&gt;&lt;font color=&quot;gray&quot;&gt; &#160;4&lt;/font&gt;&lt;/i&gt;</title>
+<path fill="none" stroke="black" d="M886,-1541.81C886,-1533.79 886,-1524.05 886,-1515.07"/>
+<polygon fill="black" stroke="black" points="889.5,-1515.03 886,-1505.03 882.5,-1515.03 889.5,-1515.03"/>
+</g>
+</g>
+</svg>

+ 1 - 1
pom.xml

@@ -9,7 +9,7 @@
     <packaging>pom</packaging>
     <version>1.0-SNAPSHOT</version>
     <modules>
-        <module>java-control-flow</module>
+        <module>java9-flowchart</module>
         <module>aidl-to-json</module>
         <module>map-to-json</module>
         <module>flowchart</module>