- トップページ
- 高度共通 午前1
- 令和6年度秋季問題一覧
- 令和6年度秋季問題7-解答・解説-分析
令和6年度秋季問題
問題7
手続型言語のコンパイラがコード生成までに行う処理のうち,最後に行う処理はどれか。
ア | 意味解析 |
イ | 構文解析 |
ウ | 最適化 |
エ | 字句解析 |
手続型言語のコンパイラがコード生成までに行う処理のうち,最後に行う処理はどれか。
ア | 意味解析 |
イ | 構文解析 |
ウ | 最適化 |
エ | 字句解析 |
解答:ウ
<解説>
コンパイラは、人間が記述したソースコードをコンピュータが実行可能な機械語(オブジェクトコード)に翻訳するソフトウェアである。この翻訳処理は、一般的に以下の順序で行われる。
- 字句解析・・・ソースコードをトークンに分解
- 構文解析・・・文法構造を解析して構文木を生成
- 意味解析・・・型・識別子・宣言などの整合性を検証
- 最適化 ・・・・・中間コードを効率化(不要命令削除・定数畳み込みなど)
- コード生成・・・最終的な機械語を出力
ア | × | 意味解析は、構文解析の次に実施される処理である。この段階では、プログラムが言語の仕様上、意味的に正しいかどうかを検証する。具体的には、変数が宣言されているか、演算の際のデータ型が整合しているかといったチェックが行われる。 意味解析は、構文解析の後に行われるが、コード生成よりも前に完了する必要がある。 したがって、「コード生成までに行う処理のうち最後」とは言えない。 |
イ | × | 構文解析は、字句解析の次に行われる処理である。字句解析によって分割されたトークン(プログラムの最小単位)の並びが、言語の文法規則に合致しているかを検証し、構文木と呼ばれる階層構造のデータを作成する。 構文解析はコンパイル工程の初期段階に位置しており、意味解析や最適化よりも前に実施される。 したがって、「最後に行う処理」ではない。 |
ウ | ○ | 最適化は、意味解析の後、コード生成の前に行われる処理である。この段階では、プログラムの意味を変えずに、実行速度の向上やメモリ使用量の削減を目的として、より効率的なコードに変換する。問題では「コード生成までに行う処理のうち、最後に行う処理」が問われており、上記の処理順序から最適化がコード生成の直前の工程となる。コード生成の直前または生成中に行われる最終的な工程のひとつであり、 問題文の「コード生成までに行う処理のうち最後」に該当する。 |
エ | × | 字句解析は、コンパイラが行う最初の処理である。ソースコードを文字単位で読み込み、変数名、演算子、キーワードといった意味を持つ最小単位の「トークン」に分割する。 これは一連の処理の開始点であり、コード生成までに行う最後の処理ではないため、不正解である。 |
お問い合わせ