HOME»応用情報技術者平成25年秋期»午前問20
応用情報技術者平成25年秋期 午前問20
問20
コンパイラにおける処理を字句解析,構文解析,意味解析,最適化の四つのフェーズに分けたとき,意味解析のフェーズで行う処理はどれか。
- 言語の文法に基づいてプログラムを解析し,文法誤りがないかチェックする。
- プログラムを表現する文字の列を,意味のある最小の構成要素の列に変換する。
- 変数の宣言と使用とを対応付けたり,演算におけるデータ型の整合性をチェックする。
- レジスタの有効利用を目的としたレジスタ割付けや,不要な演算を省略するためのプログラム変換を行う。
分類
テクノロジ系 » ソフトウェア » 開発ツール
正解
ウ
解説
コンパイラは、高水準語で記述されたソースコードをコンピュータが理解できる機械語に一括変換する(=コンパイルする)ソフトウェアです。
コンパイルには、①字句解析 → ②構文解析 → ③意味解析 → ④最適化 → ⑤コード生成 の5つの処理段階があり、この順番で実行されていきます(設問ではコード生成が除外されています)。
コンパイルには、①字句解析 → ②構文解析 → ③意味解析 → ④最適化 → ⑤コード生成 の5つの処理段階があり、この順番で実行されていきます(設問ではコード生成が除外されています)。

- 字句解析
- プログラムを表現する文字列を、意味のある最小の構成要素(トークン)に分解するint a = 5 + 3;
↓
int(型)、a(変数)、=(代入演算子)、5(整数)、+(加算演算子)、3(整数)、;(セミコロン) - 構文解析
- 句解析で得られたトークンをもとに、言語の文法に基づいてプログラムを解析し、文法誤りがないかチェックする。構文木を使用してプログラムの構造を表現する
- 意味解析
- プログラムが意味的に正しいかを検証する。変数の宣言と使用とを対応付けたり、演算におけるデータ型の整合性を確認する
- 最適化
- コードの実行効率を向上させるために、不要な演算の省略、ループの展開、関数のインライン展開、レジスタ割付けなどの変換を行うint a = 2 * 5;
↓
int a = 10; - コード生成
- 構文木を元にデータの記憶位置、レジスタ割当てを確定し、コンピュータが実行可能な機械語やアセンブリ言語、中間コードとして出力する
- 構文解析のフェーズで行う処理です。
- 字句解析のフェーズで行う処理です。
- 正しい。意味解析のフェーズで行う処理です。
- 最適化のフェーズで行う処理です。