1.コンパイラ
プログラムは、CやJavaなどのプログラミング言語で書かれます。これは、人間にとっては分かりやすいのですが、コンピュータはこのままでは理解できません。コンピュータが理解できるのは、01の2進数で表された機械語だけです。
そこで、プログラム言語をコンピュータが実行できる機械語に変換する処理(コンパイル)をします。この処理のソフトウェアをコンパイラと言います。
過去問では、「コンパイラ」に関して、「コンピュータが直接実行可能な機械語に,プログラムを変換するソフトウェア(H25春IP問53不正解選択肢)」とあります。
■プログラム言語 | → | ■機械語 |
2.コンパイルの流れ
コンパイラにおける処理は、まず、ソースコードを解析します。このとき、字句解析,構文解析,意味解析の流れで解析をします。たとえば構文解析では、ソースコードの文法に誤りがないかをチェックします。
次にプログラムの実行時間を短縮するための最適化を行います。たとえば、途中で値が変更されない変数を定数で置き換えることで、処理速度を速めます。
最後に、最適化されたソースコードを機械語に変換してコンパイルが完了します。
上記の流れを、過去問(H25秋AP問20)を基に整理します。
(1)ソースコード解析
①字句解析
プログラムを表現する文字の列を,意味のある最小の構成要素の列に変換する。
②構文解析
言語の文法に基づいてプログラムを解析し,文法誤りがないかチェックする。
③意味解析
変数の宣言と使用とを対応付けたり,演算におけるデータ型の整合性をチェックする。
(2)最適化
レジスタの有効利用を目的としたレジスタ割付けや,不要な演算を省略するためのプログラム変換を行う。
たとえば、どんな処理がありますか?
過去問(H27秋AP問19)では、「コンパイラが行う最適化の方法」として,「定数が格納される変数を追跡し,途中で値が変更されないことが確認できれば,その変数を定数で置き換える」とあります。
他には、たとえば、ループ処理の中に、毎回変数の値をセットしているとする。それは、ループの中で処理する必要がなければ、外に出しておく。そうすると、処理ステップ数が減る。
(3)機械語に変換
最適化されたソースコードを機械語に変換します。
3.コンパイラに関する過去問
(1)H27秋AP
問19 目的プログラムの実行時間を短くするためにコンパイラが行う最適化の方法として,適切なものはどれか。
ア 繰返し回数が多いループは,繰返し回数がより少ないループを複数回繰り返すように変形する。例えば,10,000回実行するループは,100回実行するループを100回繰り返すようにする。
イ 算術式の中で,加算でも乗算でも同じ結果が得られる演算は乗算で行うように変更する。例えば,“X+X”は“X*2”で置き換える。
ウ 定数が格納される変数を追跡し,途中で値が変更されないことが確認できれば,その変数を定数で置き換える。
エ プログラム中の2か所以上で同じ処理を行っている場合は,それらをサブルーチン化し,元のプログラムのそれらの部分をサブルーチン呼出しで置き換える。
↓
↓
↓
↓
↓
【正解】ウ
(2)H27春AP
問19 あるコンピュータ上で,異なる命令形式のコンピュータで実行できる目的プログラムを生成する言語処理プログラムはどれか。
ア エミュレータ イ クロスコンパイラ
ウ 最適化コンパイラ エ プログラムジェネレータ
↓
↓
↓
↓
↓
【正解】イ
(3)H25秋AP
問20 コンパイラにおける処理を字句解析,構文解析,意味解析,最適化の四つのフェーズに分けたとき,意味解析のフェーズで行う処理はどれか。
ア 言語の文法に基づいてプログラムを解析し,文法誤りがないかチェックする。
イ プログラムを表現する文字の列を,意味のある最小の構成要素の列に変換する。
ウ 変数の宣言と使用とを対応付けたり,演算におけるデータ型の整合性をチェックする。
エ レジスタの有効利用を目的としたレジスタ割付けや,不要な演算を省略するためのプログラム変換を行う。
↓
↓
↓
↓
↓
ア:構文解析
イ:字句解析
エ:最適化
【正解】ウ
(4)H20春FE午前
問38 コンパイラによる最適化の主な目的はどれか。
ア ソースプログラムのレベルでのデバッグを容易にする。
イ プログラムの実行時間を短縮する。
ウ プログラムの保守性を改善する。
エ 目的プログラムを生成する時間を短縮する。
↓
↓
↓
↓
↓
正解はイです。
コメント