【こうぶんかいせき】
構文解析 とは?
最終更新:
💡 単語の並びが「文法どおり」かチェックして設計図を作る工程
トークンの並びを文法規則に照らして解析する処理。コンパイラなどでは構文木や抽象構文木(AST)を作り、後続の処理へ渡す。構文が正しいことだけでは、変数や型などの意味の正しさは保証されない。
📌 このページのポイント
- 字句解析で得たトークンの並びを、文法規則に照らして解析する
- 構文木やASTなどで、式・文の構造を表せる
- LLは上から展開し、LRは入力から規則を還元する代表的な方法
- 構文上の誤りと、名前・型などの意味上の誤りは分けて確認する
構文解析って字句解析の次にやる処理なの?
具体的にはどんなことをするの?
代入を許す言語の例として「x = 3 + 5;」を考えよう。左側のxに、右側の3と5を足した式を代入する構造だね。「代入」の下にxと「加算」、加算の下に3と5を置いた木で表せるよ。図はその構造を簡略化したASTなんだ。
構文木とASTは同じもの?
LL法とLR法は、どちらも左から読むの?
どちらも入力を左から読むよ。LLは左端導出で、開始記号から展開し、木を上から下へたどる方法。LRは右端導出を逆順にたどり、読んだトークンを規則に従って還元する下からの方法だよ。右端導出という名前でも、入力を右から読むわけではない。BisonはLR系などのパーサーを生成できるんだ。
解析が通れば、プログラムは正しく動く?
まとめ:ざっくりこれだけ覚えればOK!
「構文解析」って出てきたら「トークンの並びを文法に照らし、構造を読み取る処理」と思えばだいたいOK!
📖 おまけ:英語の意味
「Syntax Analysis / Parsing」 = 構文の解析
💬 Syntaxは構文、Analysisは解析。言葉やプログラムが、どのように組み立てられているかを読み取る処理だよ。