基礎理論 - 1.基礎理論 - 3.情報に関する理論 - 9.コンパイラ理論

Last Update : September 04 2022 11:03:36

     

a. コンパイラの役割

コンピュータが直接実行できる言語は 2 進数で表現される機械語だけである。人が作成するソースプログラムをコンピュータが理解できる機械語に変換する必要がある。その作業を行うのがコンパイラ(言語プロセッサ)である。


b. コンパイルの過程

  1. 原始プログラムの作成(ソースプログラム)
  2. コンバイル(未解決アドレスをリストアップ)
     翻訳は、「字句解析」「構文解析」「意味解析」「最適化」「コード生成」の順です。
     ①「字句解析」原始プログラムを変数や演算子などのトークン(意味の持つ最小単位)に分ける
     ②「構文解析」トークンの並びがプログラミング言語の文法に合致しているか調べる
     ③「意味解析」変数や演算子が適切に使用されているかどうか調べる
     ④「最適化」プログラムの冗長性の排除
     ⑤「コード生成」目的プログラムを生成する
  3. ロードモジュール(実行可能プログラム)の作成(未解決アドレスの解決)
    複数の目的プログラムをリンカ(連携編集プログラム)によって連結してロードモジュールを作成する。
    ※プログラムの実行中にリンクすることを動的リンク(ダイナミックリンク)と言います。動的リンクを行うライブラリーを動的リンクライブラリー(DLL)と言います。これにより実行時のメモリを節約出来ます。
  4. 実行(実アドレスへの変換)

ローダを使用してロードモジュールを主記憶装置にロードする。ローダとは、プログラムを主記憶にロードすることです。(つまり、実アドレスへの変換)


c. 字句解析

読込だソースプログラムを字句に分ける処理


d. 構文解析

字句をプログラミング言語の文法に従って解析する処理


e. 意味解析

変数や演算子が適切に使用されているかどうか調べる処理


f. 最適化

プログラムの処理効率がよくなるようにコードを変更する処理


g. 機械語

機械語は、 コンピュータがそれを読み込んで、 そのまま処理を進めることが出来るプログラムです。
機械語は、命令部(オペコード)と演算対象(オペランド)の値またはアドレスからなる。

中間言語 】(IL:Intermediate Language)
中間言語とは、コンパイラがプログラミング言語のソースコードから機械語に変換する途中で生成するプログラミング言語のことである。
ソースプログラム(原始プログラム)は、より人間の言葉に近い高水準言語で記述されており、コンピュータがそのまま実行することはできない。そのため、コンパイラによっていったん中間言語に置き換えられてから、機械語に翻訳され、実行可能なプログラムとなる。
ソースプログラムを様々な高水準言語で記述できるようになった今日、各種のソースプログラムを中間言語に置換して中間コードとし、リンケージエディタ(連係編集プログラム)により全体をまとめる作業は機械語への翻訳作業を効率よく行うのに不可欠となっている。


h. アセンブリ言語

アセンブリ言語は機械語と 1 対 1 で対応していて、アセンブリ言語で書かれたプログラムは、 逐語訳のように機械語に翻訳されます。
アセンブラは、アセンブリ言語で書かれた原始プログラムを機械語に翻訳する言語プロセッサです。


  [ 例題 ] 
  1. 平成30年度秋期 問19  コンパイラ
  2. 平成28年度春期 問20  リンカ
  3. 平成27年度春期 問30  処理の流れ クエリ


     

www.it-shikaku.jp