ソフトウェア開発技術者試験 2001年度 = 平成13年度 午前 問44

 図はコンパイラにおける処理の流れを表している。a~dに入る用語の組合せとして、適切なものはどれか。

 [ a ] → [ b ] → [ c ] → [ d ] → 目的コード生成

構文解析字句解析意味解析最適化
構文解析字句解析最適化意味解析
字句解析構文解析意味解析最適化
字句解析構文解析最適化意味解析

解答



解説

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

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

 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トップページへ