簡介:
上一篇已經講解了如何安裝Graphviz, Graphviz可以基於dot語法生成流程圖,這一節來了解下dot語法的結構和使用。官方文檔參考。
一: Dot語言
DOT語言是一種文本圖形描述語言。它提供了一種簡單的描述圖形的方法,並且可以為人類和計算機程序所理解。DOT語言文件通常是具有.gv或是.dot的文件擴展名。
很多程序都可以處理DOT文件。其中的一些,例如dot,neato,twopi,circo, fdp與sfdp,會讀取DOT文件並將之渲染成為圖形格式。其它的一些,比如gvpr,gc,accyclic,ccomps,sccmap和tred,可以讀取DOT文件並對它代表的圖形進行一些處理。類似於GVedit,lefty,dotty和grappa則提供了交互式的界面。以上程序大部分都包括在了Graphviz軟件包中。
二:基本語法
2.1 無向圖
在最簡單的應用中,DOT語言可以用來描述一張無向圖。無向圖顯示了對象間最簡單的關系,例如人之間的友誼。使用關鍵字graph開始一張無向圖的定義,並用大括號包含要描述的節點,雙連字號(--)被用來描述節點間的關系。另外,一行的末尾需要加上分號(;)。
graph graphname { a -- b -- c; b -- d; }
生成圖像如下
2.2 有向圖
類似於無向圖,DOT語言也可以用來描述一張有向圖,類似於流程圖和樹狀圖。其語法與無向圖相似,但要在圖的最開始使用關鍵字'digraph',並用箭頭(->)表示節點直接的關系。
digraph graphname {
a -> b -> c;
b -> d;
}
生成圖像圖下
2.3 屬性
DOT語言中,可以對節點和邊添加不同的屬性。這些屬性可以控制節點和邊的顯示樣式,例如顏色,形狀和線形。可以在語句和句尾的分號間放置一對方括號,並在其中中放置一個或多個屬性-值對。多個屬性可以被逗號和空格(, )分開。節點的屬性被放置在只包含節點名稱的表達式后。
graph graphname { // label屬性可以改變節點的顯示名稱
a [label="Foo"]; // 節點形狀被改變了
b [shape=box]; // a-b邊和b-c邊有相同的屬性
a -- b -- c [color=blue]; b -- d [style=dotted]; }
帶屬性的圖如下
2.4 注釋
DOT語言支持C語言與C++風格的單行與多行注釋。另外,也支持Shell腳本風格的以#開頭的注釋。
// 單行注釋 /* 多行 注 釋 */ # 如此的行也會被忽略。
三: Dot生成圖片
將程序編譯的流程使用Dot生成流程圖。代碼如下,保存成文件build.dot
digraph G{ node[shape=box]; source[fontname="FangSong" label="源文件(.h .c)" color = "red"]; pre[fontname="FangSong" label="預編譯后的文件(.i)"]; build[fontname="FangSong" label="編譯后的匯編文件(.S)"]; as[fontname="FangSong" label="匯編后可重定位文件(.o)"]; link[fontname="FangSong" label="鏈接可重執行文件(ELF)" color = "red"]; source->pre[fontname="FangSong" label="gcc -i" fontsize = 12]; {rank=same; source; pre;} pre->build[fontname="FangSong" label="gcc -s" fontsize = 12]; build->as[fontname="FangSong" label="as -o" fontsize = 12]; as->link[fontname="FangSong" label=" gcc -o" fontsize = 12]; }
相同路徑下打開powershell執行命令: dot -T png -o builformatd.png build.dot
生成結果如下
一個比較漂亮的dot生成圖示范: https://blog.csdn.net/ac_dao_di/article/details/57427609?utm_source=blogxgwz4