はじめに

多量の行が表示されないように、このブログは1コンテンツしか表示されない。ブログアーカイブから、他の記事を捜してくれ。

環境作れし。
・gawk 3.1.5 for Windows をググッて入手。
・gawk.exeをpathの通ったフォルダにぶち込めし。
 (「windows パスを通す」ググッて)
 (面倒なら、C:\windowsにぶち込む)
・環境変数「awkpath」にスクリプトを保存するフォルダを設定。
 (「環境変数 設定 windows」ググッて)
 (面倒なら、C:\windowsに、紹介されているスクリプトぶち込む)

2013年11月10日日曜日

C++ソース解析クラス図作成支援awk script

C++のプロジェクトファイル渡されて、「仕様書無いケド改修シロ」だと??ふざくるな!!

…ってな訳で、クラス図だ。

クラス図って言っても、派生のクラス図じゃないぞ。そんな、閉じたドキュメント、導入タイミングじゃクソの役にもたたん。
欲しいのは関連クラス図。誰が総親で、ドイツがどのオブジェクトのオーナーでライフサイクルはどーなってるかとかの関連を把握すれば、ブラックボックスの特定とかできるジャン。つまり、解析範囲をかなり特定できる訳だ。

クラスにどんなメソッドがあって、「静的、動的、参照、ポインタ」どんな形でオブジェクトの生成をして、どんなメソッドを呼び出しているか、メソッド単位の呼び出し関連一覧を作る。
次に、呼び出し関連一覧を解析して、クラス単位の生成親子関係を調査し、図を描く時に親から数えてどれくらいの深さに在るか、親は誰かを一覧化する。

…あ゛~、概要説明が、これだけ複雑ってことは、スクリプトは解説しようがナイね。

ソース、ヘッダがあるフォルダでallc1.batを起動すれば、c1.tsv(メソッド単位の呼び出し関連一覧)とc3.tsv(クラス親子一覧)を生成する。
後は、両ファイルをExcelで開いてくれ。

※クラスの「静的、動的、参照、ポインタ」とメッソドの記載は、表上でオリジナルな接続詞でつなげてある。推測してくれ。

※親子のレベルは、トップは"0"だけど、子は最下層を"99"として、下位から発番している。

※c1.tsvは、不親切な表だが、メソッドのコードと表の該当行を見比べれば、きっと理解できるはず。

では、グッドラック!

AWKのつぼ

連想配列を多用して、ファイル、クラス、メソッドの辞書や逆引き辞書を作りこんでる。
このスクリプトのリバースする暇があるなら、本来のC++ソースの解析をしてくれ。
その方が不幸度合いが小さい。
あ、c1.awk中にMFC等の変数クラスを除外する除外文字列が4箇所ある。一目で判るぞ。
余分なクラスが出るときは、除外文字に追加してくれ。

allc1.bat


allc1.awk


c1.bat


c1.awk


c2.awk


c3.awk


2013年11月2日土曜日

VBメッソド切り!日本語Regionは使えませんから。残念!なawk script

VBからVB.NETへ移行するとき、イベントの追加等でメソッドのソース上の並び順が変わってしまうんだよな。
動くから問題ないが、差分を出すのが大変だ。
WinMerge等使って差分を出すと、ソースの同期がとれず、差分だらけになってしまう。
そこで、メソッド単位のソース分割だ。

メソッド名、もしくはRegion名毎にソースを分割する。もちろん、その名称をファイル名に使っている。
しかし、分割するソースがUTF-8の為、Region名に日本語を使っていると、作成されるファイル名が化ける。
ま、妥協してくれ。いやなら、nkf32.exeあたりで事前にSJIS化してくれ。

分割したソースをフォルダごとWinMergeに食わせりゃ、OK.。
VB6とVB.NETではメソッド名が変更されたイベントがある。新旧のファイル名をどちらかに合わせてくれ。WinMergeのリスト画面でrenameすると楽だぞ。

ちなみに、コメントアウトしたメソッドも抽出するぞ。親切だろ。

AWKのつぼ

特になし。力技ってヤシだ。

vbcut.bat


vbcut.awk