手続型言語のコンパイラが最後に行う処理|科目A-1(応用情報技術者) 令和6年 秋期午前試験 問20
出典:令和6年秋期 午前 問20
分野:ソフトウェア / 開発ツール
手続型言語のコンパイラがコード生成までに行う処理のうち,最後に行う処理はどれか。
- ア:意味解析
- イ:構文解析
- ウ:最適化
- エ:字句解析
TSUNAGARU-ADVICE
まず押さえたいこと
コンパイラの代表的な処理順序は、字句解析 → 構文解析 → 意味解析 → 最適化 → コード生成です。したがって、コード生成の直前に行われる処理は最適化です。
迷ったときの判断軸
字句解析では文字列をトークンに分け、構文解析では文法に従っているかを調べ、意味解析では型や変数の使い方などを確認します。その後、実行効率などを改善する最適化を行ってから、目的コードを生成すると整理すると覚えやすくなります。
科目Bにつなげるために
特にプロフェッショナルデジタルスキル(システム)試験合格を目指す方は、各工程の順序だけでなく、字句解析=トークン化、構文解析=文法確認、意味解析=意味・型の確認、最適化=効率改善という役割の違いも押さえておきましょう。

コンパイラは、人が読み書きしやすい高水準語のソースコードを、コンピュータが実行できる機械語などに変換するソフトウェアです。
コンパイル処理は、ソースコードをいきなり機械語にするのではなく、段階的に解析・変換していきます。基本の流れは「字句解析 → 構文解析 → 意味解析 → 最適化 → コード生成」です。
字句解析では、たとえば「int a = 1 + 2;」というコードを、「int」「a」「=」「1」「+」「2」「;」のような部品に分けます。この部品をトークンといいます。
構文解析では、トークンの並びが文法に合っているかを確認します。たとえば、セミコロンが抜けている、かっこの対応が合っていない、といった誤りを見つけます。
意味解析では、文法としては正しくても、意味として問題がないかを確認します。たとえば、宣言していない変数を使っていないか、数値に文字列を足そうとしていないかなどを確認します。
最適化では、処理結果を変えずに、より効率よく実行できる形に変換します。たとえば「int a = 4 * 5;」を、あらかじめ計算して「int a = 20;」のようにすることがあります。
コード生成では、解析と変換が終わった内容をもとに、コンピュータが実行できる機械語やアセンブリ言語などを作ります。
つまり、コンパイラは「ソースコードを分解する」「文法を確認する」「意味を確認する」「効率よく直す」「実行できるコードを作る」という順番で処理します。
したがって、コード生成までに行う処理のうち最後なのは、ウの最適化です。
❌他選択肢が誤りの理由ア:意味解析
⇒意味解析は、構文解析の後に行われますが、その後に最適化が行われます。
イ:構文解析
⇒構文解析は、字句解析の後に行われ、その後に意味解析や最適化が続きます。
エ:字句解析
⇒字句解析は、ソースコードを単語や記号などのトークンに分解する初期段階の処理です。選択肢の中では最も早く行われます。