C・F・G

例外系の制御フローグラフを作るのが面倒ー,出来ん.try複雑すぎ.だいたいみんなfinallyに通り過ぎ.というかそもそも途中終了する文(break,continue,return,throwの各文)は,制御フローグラフを作るときに,その文の存在するコンテキスト(どのような文に囲まれているかとか)に依存するため,単純に途中終了文に相当する構文木のノードの子孫ノードを見ただけでは,制御フローグラフは作れないのだが,(祖先ノードの情報も必要)さらに,returnとthrowは呼び出し関係を超える制御フローを作ろうとした場合,呼び出し時のコールスタックがわからないと制御フローが確定しない.また,当然ひとつのコンパイル単位(つまりクラスファイル)だけでは確定しない. 今利用しているライブラリがクラスファイル単位の制御フローグラフを作るライブラリで,かつ例外系を制御フローにする処理からはずし,っていうか,catch節とかfinally節は構文木上ですら,単なるtryの一部として扱っているから,これを制御フローに展開するのは大変だ.

とはいっても今のライブラリがなかったら絶対に作れなかっただろうから感謝.

ちなみにbreakやconitueとかでループを抜けるときに途中でfinally節を通ることぐらいは実装しておいてほしかった.
JavaCCの記述から作り直そうかな.