digraph g { "multiply()" [shape=box, rank=min]; // Rank adjustment { rank = same; "int result = 0"; "while (x > 0)"; "System.out.println(result)"; "return result"; } { rank = same; "result += y"; "x--"; } // Control flow "multiply()" -> "int result = 0" [style=bold]; "multiply()" -> "while (x > 0)" [style=bold]; "multiply()" -> "System.out.println(result)" [style=bold]; "multiply()" -> "return result" [style=bold]; "while (x > 0)" -> "result += y" [style=bold]; "while (x > 0)" -> "x--" [style=bold]; // Data flow "int result = 0" -> "result += y" [color=red]; "int result = 0" -> "System.out.println(result)" [color=red]; "int result = 0" -> "return result" [color=red]; "result += y" -> "result += y" [color=red]; "result += y" -> "System.out.println(result)" [color=red]; "result += y" -> "return result" [color=red]; "x--" -> "x--" [color=red]; "x--" -> "while (x > 0)" [color=red]; // Order adjustment "int result = 0" -> "while (x > 0)" [style=invis]; "while (x > 0)" -> "System.out.println(result)" [style=invis]; "System.out.println(result)" -> "return result" [style=invis]; "result += y" -> "x--" [style=invis]; }