digraph g { "main()" [shape=box]; "main()" -> "multiply(3, 2)" [style=bold]; { rank = same; "x"; "y"; "out" } "x" -> "y" [style=invis]; "y" -> "out" [style=invis]; "multiply(3, 2)" -> "multiply()" [style=dotted]; "multiply(3, 2)" -> "x"; "multiply(3, 2)" -> "y"; "multiply(3, 2)" -> "out"; "x" -> "x_in" [style=dotted]; "y" -> "y_in" [style=dotted]; "output" -> "out" [style=dotted]; "x" -> "out" [style=bold, color=blue]; "y" -> "out" [style=bold, color=blue]; "multiply()" [shape=box]; // Rank adjustment { rank = same; "x_in"; "y_in"; "output" } { rank = same; "int result = 0"; "while (x > 0)"; "System.out.println(result)"; "return result"; } { rank = same; "result += y"; "x--"; } // Input/output "multiply()" -> "x_in"; "multiply()" -> "y_in"; "multiply()" -> "output" "x_in" -> "while (x > 0)" [color=red]; "x_in" -> "x--" [color=red]; "y_in" -> "result += y" [color=red]; "return result" -> "output" [color=red]; // 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]; "x_in" -> "y_in" [style=invis]; }