2010-11-05 214 views
4

我有一個模塊,可以自動輸出(以點格式)以某種彙編語言(我的編譯器的IR)編寫的函數。節點是使用「記錄」形狀打印的基本塊。問題是,邊走陌生的路,例如:Graphviz Dot中奇怪的邊緣位置

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 
} 

和圖像:

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

我能做些什麼,以便從「目標」,以「測試」邊緣被放置在左側?

+0

你能具體談談你想圖表來一般遵循路由箭頭的標準是什麼?例如。你想盡量減少過路點? – LarsH 2010-11-06 10:09:57

+0

我希望從'目標'到'測試'的邊緣在左側路由。現在它看起來真的很受歡迎,並且不能真正理解爲什麼選擇這樣的路線。 – 2010-11-06 17:35:33

回答

8

最簡單的非Guru的方式是強迫這種任性的鏈接附加在「西側」。

n2:target:w -> n1:name:w 

這可能適用於這種情況。更通用的方式,但需要更多的思考和編碼,但會允許邊緣附加到:s和:n如果您需要,添加零大小的不可見節點(color = white,或者可能存在可見性屬性),並使用兩條邊從n2到n1。只有其中一個有箭頭。不可見節點將不得不坐在n1或n2的左側。唉,我的graphvis-fu不夠強大,無法創建一個工作示例;也許別人可以創建一個。

alt text