生成アルゴリズム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2018/05/29 02:36 UTC 版)
コードのリストから基本ブロックを生成するアルゴリズムは単純である。コードをスキャンし、ブロックの開始や終端となる命令すなわち「ブロックの境界」をマークする。マークした境界ごとにリストを切り分ければ、基本ブロックができる。この方法は、公式な定義では「最長」の制御ブロックを生成するとは限らないが、通常十分(最長の基本ブロックとは、隣接の基本ブロックを、定義を侵すことなく取り込むことができないものを指す)である。 基本ブロックを終了させる命令には以下のものがある: 無条件、あるいは条件分岐命令、直接分岐も間接分岐も含む 呼び出し元の手続きへのreturn 例外処理を発生させうる命令 復帰しない関数は基本ブロックの終端になる。たとえば、例外や特別な呼び出しを発生するC言語の longjmp や exit 関数などがある 基本ブロックを開始させる命令には以下のものがある: 手続きや関数のエントリーポイント ジャンプや分岐の対象 条件分岐命令の後の、分岐しなかった場合のコード 例外を発生させる命令の後のコード 例外ハンドラ 制御が基本ブロックの最後を通過することはないため、ブロックの境界は、基本ブロックを見つけた後に修正しなければならない場合もある。特に、分岐しなかった場合のコードは二方向の分岐に変換し、例外を発生させる関数呼び出しには無条件分岐を付き足なければならない。このため他のブロックの先頭にラベルをつける必要が生じる場合もある。
※この「生成アルゴリズム」の解説は、「基本ブロック」の解説の一部です。
「生成アルゴリズム」を含む「基本ブロック」の記事については、「基本ブロック」の概要を参照ください。
- 生成アルゴリズムのページへのリンク