digraph { { node [shape=plaintext]; "level 1" -> "level 2" -> "level 3"; } node [shape=box;style="rounded,filled";color=AntiqueWhite;]; c1 [ label="crash A\nid 1\ncrash root" ]; c2 [ label="crash B\nid 2" ]; c3 [ label="crash C\nid 3\ncrash leaf" ]; c4 [ label="crash D\nid 4\ncrash leaf" ]; { rank = same; "level 1"; c1;} { rank = same; "level 2"; c2; c4;} { rank = same; "level 3"; c3;} node [shape=box;style="rounded,dashed";]; exp1 [ label="crash B matches fail\nmatch for the next child\nof crash A"]; exp2 [ label="crash D matches successfully\nreturn crash D"]; node [shape=box;style="invis";]; "channel" -> c1 [ label="trigger" ] c1 -> {exp1 exp2} exp1 -> c2 -> c3 [ style=dashed dir=none] exp2 -> c4 }