応用情報技術者 2024年 秋期 午前2 問20
問題文
手続型言語のコンパイラがコード生成までに行う処理のうち、最後に行うものはどれか。
選択肢
ア:意味解析
イ:構文解析
ウ:最適化(正解)
エ:字句解析
手続型言語のコンパイラがコード生成までに行う処理のうち、最後に行うものはどれか【午前2 解説】
要点まとめ
- 結論:コンパイラのコード生成直前に行う処理は「最適化」である。
- 根拠:字句解析→構文解析→意味解析の後、生成される中間コードを効率化するために最適化を行う。
- 差がつくポイント:最適化はコードの実行効率やサイズを改善する重要な段階であり、解析処理とは役割が異なることを理解すること。
正解の理由
コンパイラはまず字句解析でソースコードをトークンに分解し、構文解析で文法構造を解析します。次に意味解析で型チェックや名前解決を行い、正しい意味を持つか検証します。これらの解析処理が終わった後、生成される中間コードや機械語コードの効率を高めるために「最適化」を行います。最適化はコード生成の直前に実施され、無駄な命令の削除や処理の高速化を図るため、最後に行う処理として正しいのはウ: 最適化です。
よくある誤解
字句解析や構文解析を最後の処理と誤解しやすいですが、これらはコンパイルの初期段階です。意味解析も解析段階の一部であり、コード生成前の最終処理は最適化です。
解法ステップ
- コンパイラの処理順序を理解する(字句解析→構文解析→意味解析→最適化→コード生成)。
- 各処理の役割を整理し、解析系と生成系の違いを把握する。
- 「最後に行う処理」という条件から、コード生成直前の処理を特定する。
- 選択肢の意味を確認し、最適化がコード生成前の最終処理であることを判断する。
選択肢別の誤答解説
- ア: 意味解析
→ ソースコードの意味的整合性をチェックする解析段階であり、コード生成の前段階です。 - イ: 構文解析
→ ソースコードの文法構造を解析する初期段階で、最後の処理ではありません。 - ウ: 最適化
→ 正解。コード生成前に中間コードや機械語コードの効率化を行う処理です。 - エ: 字句解析
→ ソースコードをトークンに分解する最初の処理で、最後の処理ではありません。
補足コラム
コンパイラの最適化には様々な手法があり、ループ展開やデッドコード削除、レジスタ割り当ての改善などがあります。これにより生成されるコードの実行速度やメモリ使用量が大幅に改善されます。最適化はコンパイラの性能を左右する重要な工程です。
FAQ
Q: 最適化は必ず行われる処理ですか?
A: 多くのコンパイラは最適化を行いますが、開発段階では最適化をオフにしてデバッグしやすくすることもあります。
A: 多くのコンパイラは最適化を行いますが、開発段階では最適化をオフにしてデバッグしやすくすることもあります。
Q: 意味解析と構文解析の違いは何ですか?
A: 構文解析は文法的な正しさをチェックし、意味解析は型や変数の意味的な整合性を検証します。
A: 構文解析は文法的な正しさをチェックし、意味解析は型や変数の意味的な整合性を検証します。
関連キーワード: コンパイラ、最適化、コード生成、字句解析、構文解析、意味解析

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

