Graphviz Dot中奇怪的边缘位置

Gra*_*Lup 5 graph-theory graph graphviz

我有一个模块,可以自动输出(以点格式)用某种汇编语言编写的函数(我的编译器的IR).节点是使用"记录"形状打印的基本块.问题是边缘采取了奇怪的路线,例如:

digraph {
node [shape = record];
n0[label="{<name> entry | <body> store i, 0\nstore sum, 0\ngoto test | {<target> target}}"];
n1[label="{<name> test | <body> t2 = load i\nif t4, body,   done | {<true> true | <false> false}}"]
n2[label="{<name> body | <body> t5 = load sum\ngoto test | {<target> target}}"];
n3[color=firebrick3, label="{<name> done | <body> t9 = load sum\nret t9}}"];
n0:target:s -> n1:name:n
n1:true:s -> n2:name:n
n1:false:s -> n3:name:n
n2:target:s -> n1:name:n
}
Run Code Online (Sandbox Code Playgroud)

和图像:

http://img529.imageshack.us/img529/3780/graphviz.png

我能做什么,以便从"目标"到"测试"的边缘放在左侧?

Dar*_*enW 9

最简单的非古鲁方式是力量,在"西方"两侧附加任意的链接.

n2:target:w -> n1:name:w
Run Code Online (Sandbox Code Playgroud)

这可能适用于这种情况.一种更通用的方式,但需要更多的思考和编码,但是允许边缘附加到:s和:n如果你想要的话,是添加一个大小为零的不可见节点(颜色=白色,或者可能有可见性)属性)并使用两条边从n2到n1.只在其中一个上面有箭头.不可见节点必须位于n1或n2的左侧.唉,我的graphvis-fu不够强大,不足以创造一个有效的例子; 也许其他人可以创建一个.

替代文字