graphvizを使ってステートマシン図を書いた話

プログラム書いていて、記録と仕様化するために、ステートマシンをどうやって描こうかなと思って調べたらgraphvizというものがあるのを知りました。 試しに使ってみるとなかなか悪くないので、以下忘備録として記載します。 ちなみに、はてなブログsvgを記載するにはもう一工夫必要でした、、 別の記事に記載予定です。

参考:
1. 噂のGraphvizを使ってみる - Qiita
2. https://graphviz.gitlab.io/_pages/Gallery/directed/fsm.html

インストール

brew install graphviz

grpaphviz実行

dot -T svg sm.dot -o sm.svg

dotファイル例 (試しに作っているプリプロセッサのステートマシンです)

// sm.dot
 digraph finite_state_machine {
 //      rankdir=LR;
         rankdir=TB;
         size="8,5"
 //      node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
         node [shape = doublecircle]; NORMAL;
         node [shape = circle];
         NORMAL   -> IF_TRUE  [ label = "`ifdef true" ];
         NORMAL   -> IF_FALSE [ label = "`ifdef false" ];
         IF_TRUE  -> EL_FALSE [ label = "`else" ];
         IF_FALSE -> EL_TRUE  [ label = "`else" ];
         EL_TRUE  -> NORMAL   [ label = "`endif" ];
         EL_FALSE -> NORMAL   [ label = "`endif" ];
 }

finite_state_machineNORMALNORMALIF_TRUEIF_TRUENORMAL->IF_TRUEifdef trueIF_FALSEIF_FALSENORMAL->IF_FALSEifdef falseEL_FALSEEL_FALSEIF_TRUE->EL_FALSEelseEL_TRUEEL_TRUEIF_FALSE->EL_TRUEelseEL_FALSE->NORMALendifEL_TRUE->NORMALendif