こんにちは😀
前回、言語プロセッサをまとめた際に翻訳の1つとしてコンパイラ方式がありましたが、今回はそのコンパイラ方式の実行の手順をみていきます。
コンパイラ方式の場合、プログラムの実行に到るまでは、コンパイラ以外にリンカとローダを使用します。
ざっくりした流れとしては、以下の通りです。
①ソースコードをコンパイラして目的プログラムに変換します。
②目的プログラムをリンカを使用して実行可能ファイルにします。
③実行可能ファイルをローダを使用し、実行状態にもっていきます。
以下でそれぞれの役割の詳細をまとめます。
コンパイラ
コンパイラは、前回もみましたが人間がわかるレベルの様式で書かれたプログラムを機械語のプログラムに変換することです。
コンパイラでは、ソースコードを次のように処理して目的プログラムを生成します。
1.字句解析・・ソースコードに書かれているプログラムコードを字句単位に解析します。
2.構文解析・・分解したトークンをプログラム言語の構文規則に従って解析します。
3.意味解析・・変数の型や文がプログラム言語の使用に反っているかをチェックします。
4.最適化・・処理効率の向上を目的として、より良いプログラムの再編成を検討します。
5.コード生成・・目的プログラムを生成します。
4の最適化に関して、この手法には、コードサイズから見た最適化と実行速度から見た最適化という2つのアプローチがあります。
前者は、生成される目的プログラムのサイズが小さくなります。
後者は、実行速度が速くなることで処理に要する時間が小さくなります。
リンカ
プログラムは、自分で分割したモジュールやライブラリとしてあらかじめ提供されている関数や共通モジュールなど、すべてつなぎ合わせることで、実行に必要な機能が揃ったプログラムファイルになります。
この繋ぎ合わせる作業をリンク(連係編集)と言います。
そしてこの一連の作業をリンカ(連係編集プログラム)と言います。
この中でも、あらかじめリンクしておく手法を静的リンクと言います。
また、プログラムの実行時に、共有ライブラリやシステムライブラリをロードしてリンクする手法を動的リンクと言います。
ローダ
ロードモジュールを主記憶装置に読み込ませる作業をロードと言います。
これを担当するプログラムをローダと言います。
このように、コンパイラとリンカ・ローダのプログラムを使用して、人が書いたプログラムをシステムで実行できる状態までもっていきます。
今回はここまで🤚
では、また次回。
コメント