内部構造とデバッグファイルの解説
HelloPascal4はPascal言語のソースファイルをまず中間コードにコンパイルした後、
それを仮想マシンによって実行しています。
”デバッグファイル”は中間コードへのコンパイル結果を出力するものです。
仮想マシン
仮想マシンはレジスタのないスタックマシンとして定義され、
フレームデータ(ローカル変数など)とオペランド(式の値)が同一のスタック上に存在します。
フレーム内のデータはフレームレベルとオフセットの組で参照されます。
- データのサイズ integer, char, Boolean
は同じサイズで表され1単位となります。
real は2単位、参照型やハンドルは1単位です。
- 関数呼び出しの手順 まず戻り値の領域をスタック上に確保したあと、
引数を左から順に積み、関数をコールします。
引数は呼び出し側で解放されます。
- オブジェクト 文字列やストリームなどのオブジェクトはハンドルで参照され、自動的に解放されます。
- インストラクション 仮想マシンのインストラクション(ニモニク)は
基本インストラクションと拡張インストラクションに分かれます。
拡張インストラクションは主に文字列やストリームを扱い、名前が x (エックス)から始まります。
中間コード
中間コードはコードセクションとデータセクションに分かれます。
コードセクションには仮想マシンのインストラクションが置かれています。
データセクションには定数などが置かれます。
データセクションは実行時にフレームレベル0でアクセスできます。
デバッグファイル
デバッグファイルはコンパイル時に出力され、
ソースファイルと中間コードとの対応を調べることができます。
特に、原因のわからない”実行時エラー”が発生する場合、
エラーが起こったコードのアドレスから
ソースコードのどの位置でエラーが発生しているか発見することができます。
HelloPascalの解説
<TOP>