digraph g { "f()" [shape=box, rank=min, style = filled]; // Rank adjustment { node [style=filled] { rank = same; "int a = 1"; "while (a > 0)"; } "if (a > 10)"; break; } { rank = same; "log(a)"; "a++"; } { rank = max; "a++"; "log(a)"; } "a++" [style="filled,bold"]; // Control flow "f()" -> "while (a > 0)"; "f()" -> "int a = 1"; "while (a > 0)" -> "if (a > 10)"; "if (a > 10)" -> "break"; "break" -> "log(a)"; "break" -> "a++"; "break" -> "while (a > 0)"; // Data flow { edge [color = red]; "int a = 1" -> "while (a > 0)"; "int a = 1" -> "if (a > 10)"; "int a = 1" -> "log(a)"; "int a = 1" -> "a++"; "a++" -> "a++"; "a++" -> "while (a > 0)"; "a++" -> "if (a > 10)"; "a++" -> "log(a)" [constraint = true]; } }