二:dot語言語法及使用


簡介:
  上一篇已經講解了如何安裝Graphviz, Graphviz可以基於dot語法生成流程圖,這一節來了解下dot語法的結構和使用。官方文檔參考。

一: Dot語言

  DOT語言是一種文本圖形描述語言。它提供了一種簡單的描述圖形的方法,並且可以為人類和計算機程序所理解。DOT語言文件通常是具有.gv或是.dot的文件擴展名。

  很多程序都可以處理DOT文件。其中的一些,例如dotneatotwopicircofdpsfdp,會讀取DOT文件並將之渲染成為圖形格式。其它的一些,比如gvprgcaccyclicccompssccmaptred,可以讀取DOT文件並對它代表的圖形進行一些處理。類似於GVeditleftydottygrappa則提供了交互式的界面。以上程序大部分都包括在了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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM