令和6年度 秋期 午前 問20
ソフトウェア
コンパイラに関する問題
手続型言語のコンパイラがコード生成までに行う処理のうち,最後に行うものはどれか。
- ア意味解析
- イ構文解析
- ウ最適化
- エ字句解析
答えと解説を見る
✓ これが正解ウ最適化
解説
コード生成の直前に置かれるのは最適化です。
設問は、手続型言語のコンパイラがコード生成までに行う処理のうち、最後に行うものを選ばせています。コンパイラの処理は、字句解析、構文解析、意味解析、最適化、コード生成という順に並びます。前の段が作った結果を次の段が受け取る形なので、順序を入れ替えることはできません。設問が対象としているのはコード生成までに行う処理なので、コード生成そのものを除いた四つの中で最も後ろに来るものを答えます。それが最適化です。最適化は、意味解析までで得られた中間の表現を、同じ結果になるまま速く小さく動く形へ書き換える処理で、その結果を受けて目的の機械の命令列が作られます。言い換えると、コード生成の一つ前に置かれる段はどれかという問いになり、答えは最適化です。
ほかの選択肢はなぜ違うのか
- ア意味解析:意味解析です。型やスコープの整合を確かめて中間の表現を作る処理で、五つの段のうち三番目に当たります。この後に最適化が入るため、コード生成の一つ前ではなく二つ前になります。
- イ構文解析:構文解析です。切り出された字句の並びを文法規則に当てはめて構文木を組み立てる処理で、五つの段のうち二番目に当たります。後ろにまだ二つの段が続くので最後にはなりません。
- エ字句解析:字句解析です。原始プログラムの文字の並びを、識別子や記号や予約語といった字句に切り出す処理で、五つの段の最初に当たります。順序としては最も早く、最後に行うものではありません。
出典:令和6年度 秋期 応用情報技術者試験 午前 問20
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)