第2種情報処理技術者試験 1996年度 = 平成8年度・秋期 午前 問36

 手続き形言語のコンパイラにおける処理を順に並べたものとして、正しいものはどれか。

 ア  意味解析 → 字句解析 → 構文解析 → 最適化  → コード生成
 イ  意味解析 → 字句解析 → 最適化  → 構文解析 → コード生成
 ウ  構文解析 → 字句解析 → 意味解析 → 最適化  → コード生成
 エ  字句解析 → 意味解析 → 最適化  → 構文解析 → コード生成
 オ  字句解析 → 構文解析 → 意味解析 → 最適化  → コード生成

解答

 オ

解説

 手続き形言語のコンパイラにおける処理手順は、以下のようになります。

  ① 字句解析
  ② 構文解析
  ③ 意味解析
  ④ 最適化
  ⑤ コード生成

 C言語を例にして、大まかな流れを考えてみましょう。
  if (a > b) c = a; else c = b;
このような文字の並びを、トークン(単語)に区切っていきます。これが字句解析の段階です。この段階で綴り間違いや、キーワードや定数などの単語とみなせない語句があればエラーとなります。
  if ( a > b ) c = a ; else c = b ;
 単語に分割した後は、構文解析を行います。C言語のif文は、
  if (式) 文
  if (式) 文 else 文
のいずれかの形式ですから、これにのっとっているかどうか、すなわち《形》として正しいかどうかが調べられます。この場合はOKですね。
 それが終了すると、次は意味解析です。たとえば、C言語では、構造体のオブジェクト(変数)の大小関係を比較することができませんので、通常の算術型であれば正しいa > bという式もエラーとなります。《意味》が正しいかどうかが調べられるわけです。
 さらに、必要に応じて、プログラム高速化のための最適化が行われます。
 最後にコード生成が行われます。すなわち、アセンブリ言語や機械語レベルへの変換が行われます。


BohYoh.comトップページへ