【こうぶんかいせき】

構文解析 とは?

💡 単語の並びが「文法どおり」かチェックして設計図を作る工程
📌 このページのポイント
構文解析(パーサー)の流れ トークン列 x = 3 + 5 ; 構文解析器 (パーサー) 抽象構文木(AST) = x + 3 5 トップダウン(LL法) 開始記号から入力を予測して展開 再帰下降パーサー, ANTLR ボトムアップ(LR法) 入力を読み進めて規則を還元 yacc, bison, SLR, LALR
構文解析のイメージ
ひよこ ひよこ

構文解析って字句解析の次にやる処理なの?

ペンギン先生 ペンギン先生

そうだよ。字句解析トークンに分けた後、それらの並び方が文法ルールに合っているかをチェックするのが構文解析だね。

ひよこ ひよこ

具体的にはどんなことをするの?

ペンギン先生 ペンギン先生

たとえば「x = 3 + 5;」というトークン列を受け取って、「代入文 → 識別子 = 式;」「式 → 式 + 項」のような文法規則に当てはめて構文木を作るよ。

ひよこ ひよこ

構文木って何に使うの?

ペンギン先生 ペンギン先生

プログラムの構造をツリーで表したもので、この後の意味解析コード生成の基盤になるんだ。特に抽象構文木(AST)は不要な情報を省いた木で、コンパイラだけでなくリンターやフォーマッターでも広く使われているよ。

ひよこ ひよこ

LL法とかLR法って聞いたことがあるけど、何が違うの?

ペンギン先生 ペンギン先生

LL法は入力を左から読んで左端導出を行う方法、LR法は左から読んで右端導出を行う方法だよ。LR法の方が対応できる文法が広いけど実装が複雑で、yaccやbisonはLR法ベースのツールだね。

ひよこ ひよこ

構文解析でエラーが出たらどうなるの?

ペンギン先生 ペンギン先生

「セミコロンがない」「括弧の対応が取れていない」のような構文エラーを報告するよ。優秀なパーサーはエラー回復機能を持っていて、1つのエラーで止まらず複数のエラーをまとめて報告してくれるんだ。最近ではtree-sitterのようにエディタ上でリアルタイムに構文解析を行うツールもあるよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「構文解析」って出てきたら「トークンの並びが文法ルールに合っているか確認して木構造を作る処理」と思えればだいたいOK!
📖 おまけ:英語の意味
「Syntax Analysis / Parsing」 = 構文の解析
💬 syntax はギリシャ語の「配列・組み立て」が語源で、単語の正しい並べ方を分析する工程だよ
← 用語集にもどる