【ちゅうしょうこうぶんぎ】
抽象構文木(AST) とは?
最終更新:
💡 コードの構文を、要素が枝分かれする「構造の地図」に
ソースコードの構文上の構造を、要素とその関係が枝分かれする木として表したデータ。コンパイラやコードの検査・整形に使う。残す情報や節の種類は言語と解析ツールによって異なる。
📌 このページのポイント
抽象構文木は、何を木にするの?
コードの構文上の構造だよ。たとえば「1 + 2 * 3」なら、足し算の左右は1と掛け算、掛け算の左右は2と3という枝分かれで表せる。文字列を要素と関係に整理したデータなんだ。
その枝分かれで、何が分かるの?
式のまとまりが分かるよ。この例は「1 + (2 * 3)」という構造なので、計算すると7。「(1 + 2) * 3」なら別の枝分かれになり、結果は9だ。木の線は要素の親子関係で、処理の時間順を示す矢印ではないんだ。
コンパイラはASTを使うんだよね?
抽象ということは、括弧やコメントは全部消える?
全部消えるとは限らないよ。どの情報を残すかは言語やツールの設計による。たとえばClangは括弧の式も残す。コードを整形する道具なら、コメントなどを出力へ残す扱いも必要なんだ。
ASTが作れたら、正しいプログラムになるの?
まとめ:ざっくりこれだけ覚えればOK!
「抽象構文木(AST)」って出てきたら「コードの構文を木の形に整理したデータ」と思えばだいたいOK!
📖 おまけ:英語の意味
「Abstract Syntax Tree」 = 抽象構文木
💬 Syntaxは構文、Treeは木構造を表すよ。Abstractは構文の要素や関係に着目すること。括弧やコメントを必ずすべて捨てるという意味ではなく、残す情報はツールによって違うんだ。