FE EXAM

構文解析(parsing)

文字列が文法に従っているか調べ、構造を明らかにする処理

INTERACTIVE VISUALIZATION
トップダウン
ボトムアップ
入力(解析対象)
1 + 2 × 3
方式
トップダウン
解析する式
解析方式
解析ステップ
STEP 1/9開始開始記号 <式> から解析を始める。入力をまだ1文字も読んでいない状態。
入力(読んだ箇所をハイライト)
1+2*3
展開中の記号列(これから一致させたい記号)
<式>
解説

📌
構文解析とは

1+2*3文字の並び構文解析文法に合う?正しさ+構造を判定OK

構文解析(parsing, パージング)とは、文字列が文法に従っているかを調べ、その構造を明らかにする処理です。単に「正しいか」を判定するだけでなく、「どの部分がどういうまとまりなのか」という構造(多くは構文木)も取り出します。

身近な例えで言うと、構文解析は国語の文の「文節分け」に似ています。「私は本を読む」という文を、「私は/本を/読む」と区切り、主語・目的語・述語の関係を見抜くように、構文解析は数式やプログラムを文法のルールで区切り、要素どうしの関係を見つけます。

上のツールで式と方式を選び▶ボタンを押すと、入力の文字を左から読みながら、文法の規則に当てはめていく過程を1ステップずつ追えます。方式にはトップダウン(青)ボトムアップ(緑)の2種類があり、進め方の違いを見比べられます。

🔀
トップダウン/ボトムアップ

トップダウン(上→下)開始記号から分解ボトムアップ(下→上)部品からまとめる

構文解析の進め方には大きく2つの方向があります。

トップダウン解析(下向き解析):開始記号(一番大きなまとまり)から出発し、「式は項からできている、項は因子からできている…」と規則を当てはめながら、だんだん細かく分解して入力と照合します。人が文法を上から読み下す感覚に近く、再帰下降構文解析が代表例です。
ボトムアップ解析(上向き解析):入力の小さな部品から出発し、「この数は因子だ、因子×因子は項だ…」と規則を逆向きにたどって(還元して)、最後に開始記号1つにまとめます。

身近な例えなら、トップダウンは大きな箱を開けて中の小箱を順に開けていくイメージ、ボトムアップは小さな部品を組み立てて完成品にしていくイメージです。上のツールで方式を切り替えると、記号列が「分解されていく」のか「まとめられていく」のかの違いがよく分かります。

🛠️
コンパイラでの位置付け

字句解析構文解析意味解析コード生成

構文解析はコンパイラ(=プログラムを機械語に翻訳するソフト)の中心的な工程です。コンパイラの処理は大きく次の順で進みます。
字句解析:文字の並びを意味のある最小単位(トークン。数・記号・変数名など)に分ける
構文解析:トークンの並びが文法に合うか調べ、構文木を作る
意味解析:型の整合性など、意味的に正しいかを調べる
コード生成:構文木をもとに機械語などへ変換する

つまり構文解析は、ばらばらの単語(トークン)を受け取って「文として正しいか」と「文の構造」を確定させる、翻訳全体の土台になる工程です。ここで文法エラーが見つかれば、コンパイラは「構文エラー」として知らせます。

「字句解析・構文解析・意味解析の役割」や「トップダウン/ボトムアップの特徴」は整理して理解しておくとよいでしょう。字句解析は単語分け、構文解析は文の組み立てチェックと捉えると分かりやすくなります。

関連コンテンツ