応用情報技術者平成25年秋期 午前問20

問20

コンパイラにおける処理を字句解析,構文解析,意味解析,最適化の四つのフェーズに分けたとき,意味解析のフェーズで行う処理はどれか。
  • 言語の文法に基づいてプログラムを解析し,文法誤りがないかチェックする。
  • プログラムを表現する文字の列を,意味のある最小の構成要素の列に変換する。
  • 変数の宣言と使用とを対応付けたり,演算におけるデータ型の整合性をチェックする。
  • レジスタの有効利用を目的としたレジスタ割付けや,不要な演算を省略するためのプログラム変換を行う。

分類

テクノロジ系 » ソフトウェア » 開発ツール

正解

解説

コンパイラは、高水準語で記述されたソースコードをコンピュータが理解できる機械語に一括変換する(=コンパイルする)ソフトウェアです。

コンパイルには、①字句解析 → ②構文解析 → ③意味解析 → ④最適化 → ⑤コード生成 の5つの処理段階があり、この順番で実行されていきます(設問ではコード生成が除外されています)。
20.png/image-size:534×156
字句解析
プログラムを表現する文字列を、意味のある最小の構成要素(トークン)に分解する
int a = 5 + 3;

int(型)、a(変数)、=(代入演算子)、5(整数)、+(加算演算子)、3(整数)、;(セミコロン)
構文解析
句解析で得られたトークンをもとに、言語の文法に基づいてプログラムを解析し、文法誤りがないかチェックする。構文木を使用してプログラムの構造を表現する
意味解析
プログラムが意味的に正しいかを検証する。変数の宣言と使用とを対応付けたり、演算におけるデータ型の整合性を確認する
最適化
コードの実行効率を向上させるために、不要な演算の省略、ループの展開、関数のインライン展開、レジスタ割付けなどの変換を行う
int a = 2 * 5;

int a = 10;
コード生成
構文木を元にデータの記憶位置、レジスタ割当てを確定し、コンピュータが実行可能な機械語やアセンブリ言語、中間コードとして出力する
  • 構文解析のフェーズで行う処理です。
  • 字句解析のフェーズで行う処理です。
  • 正しい。意味解析のフェーズで行う処理です。
  • 最適化のフェーズで行う処理です。
© 2010- 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop