基本情報技術者 2018年 秋期 午前(科目A) 問19
問題文
手続型言語のコンパイラが行う処理のうち、最初に行う処理はどれか。
選択肢
ア:意味解析
イ:構文解析
ウ:最適化
エ:字句解析(正解)
手続型言語のコンパイラが行う処理のうち、最初に行う処理はどれか。【午前2 解説】
要点まとめ
- 結論:コンパイラが最初に行う処理は字句解析(トークナイズ)で、ソースコードを最小意味単位のトークン列に分解します。
- 根拠:字句解析は文字ストリームから識別子や定数、記号といったトークンを抽出し構文解析の入力を生成するため、先行する必要があります。
- 差がつくポイント:字句解析と構文解析の出力(トークンと抽象構文木)の違いや、字句解析が空白やコメントを除去する役割まで押さえておくと得点差になります。
正解の理由
正解:エ
字句解析はソースコードの文字列を読み、キーワード、識別子、数値、演算子などの「トークン」に分割する処理です。構文解析や意味解析はトークン列を前提に動作するため、まず字句解析が行われなければならず、順序として最初に実行されます。よって「字句解析」が正解です。
字句解析はソースコードの文字列を読み、キーワード、識別子、数値、演算子などの「トークン」に分割する処理です。構文解析や意味解析はトークン列を前提に動作するため、まず字句解析が行われなければならず、順序として最初に実行されます。よって「字句解析」が正解です。
よくある誤解
- 「構文解析が先」と誤解する人が多い:構文解析は字句解析の出力(トークン)を受け取り文法に従って木構造を作るため、前提として字句解析が必要です。
- 「最適化が先」と考える誤り:最適化は中間表現(IR)などが出来上がった後に行う処理で、前段階の解析が完了してから実施します。
- 「字句解析は単純で重要でない」と軽視する:トークン化の誤りは後続解析全体を壊すため、正確な字句解析は非常に重要です。
解法ステップ
- 問題文で「最初に行う処理」を確認し、処理の順序を問う問題であることを把握する。
- 各選択肢の定義を頭の中で整理する(字句解析=トークン化、構文解析=文法解析、意味解析=型や名前解決、最適化=コード改善)。
- 「どの処理が他の処理の入力になっているか」を基準に順序を決める。字句解析が最も入力に近いので正答を選ぶ。
選択肢別の誤答解説
- ア: 意味解析 — 誤り。意味解析は構文解析で得た構文木に対して型チェックや名前解決を行う工程であり、字句解析や構文解析の後に実行されます。
- イ: 構文解析 — 誤り。構文解析は字句解析が生成したトークン列を受け取り文法に従って構文木(AST)を構築する工程で、字句解析の後に行います。
- ウ: 最適化 — 誤り。最適化は中間表現に対して性能やサイズを改善する処理で、解析フェーズ(字句・構文・意味解析)が終わった後で実行されます。
- エ: 字句解析 — 正解。文字列をトークンに分解する処理で、最初に実行される工程です。
補足コラム
字句解析(レキシカル解析、レクサー)は通常、正規表現や有限オートマトンで実装され、空白やコメントの除去、文字列や数値リテラルの正規化なども行います。ツールとしては古典的にlex/flex、最近ではANTLRや手書きの状態機械が用いられます。注意点として「スキャナレスパーサ(scannerless parser)」のように字句解析と構文解析を統合する手法も存在しますが、概念的には最初にトークン相当の単位を識別する処理が必要になります。
簡単なイメージ
- ソースコード(文字列)→ 字句解析(トークン列)→ 構文解析(AST)→ 意味解析(型・名前解決)→ 最適化→ コード生成
FAQ
Q: 字句解析でコメントや空白はどう扱われますか?
A: 多くの場合、コメントと空白は無視(トークン化しない)され、解析効率を上げるために除去されます。ただし、一部の言語やプリプロセッサは空白を重要視する場合があります。
A: 多くの場合、コメントと空白は無視(トークン化しない)され、解析効率を上げるために除去されます。ただし、一部の言語やプリプロセッサは空白を重要視する場合があります。
Q: トークンとASTの違いは何ですか?
A: トークンは字句解析の出力で最小の意味単位(識別子、数値、記号など)であり、ASTは構文解析の出力でプログラム構造を階層的に表現したものです。
A: トークンは字句解析の出力で最小の意味単位(識別子、数値、記号など)であり、ASTは構文解析の出力でプログラム構造を階層的に表現したものです。
Q: 一部のコンパイラは字句解析と構文解析を同時に行いますか?
A: 技術的には統合された実装(スキャナレスパーサ)もありますが、教育や多くの実装では役割を分けて実装するのが一般的です。
A: 技術的には統合された実装(スキャナレスパーサ)もありますが、教育や多くの実装では役割を分けて実装するのが一般的です。
関連キーワード: 字句解析、トークン、レクサー、構文解析、パーサー、意味解析、最適化、抽象構文木、トークナイザ、lex、flex、ANTLR、有限オートマトン、AST、コード生成

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

