【いみかいせき】
意味解析(コンパイラ) とは?
💡 文法は合っているけど「意味が通るか」を最終チェックする番人
📌 このページのポイント
- 型の整合性チェック(型検査)を行い、不正な演算や代入を検出する
- 変数の宣言・スコープの解決やシンボルテーブルの構築を担当する
- 構文解析だけでは検出できない論理的な誤りを発見する
意味解析って構文解析とは何が違うの?
型チェック以外にはどんなことをするの?
変数が宣言される前に使われていないかとか、関数の引数の数が合っているかとか、アクセス修飾子の違反がないかなども確認するよ。シンボルテーブルという名前と情報の対応表を作るのもこの段階だね。
シンボルテーブルって何なの?
構文解析でAST(抽象構文木)を作った後に意味解析をするんだね!
そのとおり!ASTを走査しながら各ノードに型情報を付けたり、エラーを検出したりするよ。この処理を「装飾付きAST」を作るとも言うんだ。
意味解析が終わった後はどうなるの?
中間コード生成やコード最適化に進むよ。意味解析がしっかり型情報を付けてくれるおかげで、最適化器は安全に効率の良いコードを生成できるんだ。TypeScriptの型チェッカーやRustの借用チェッカーも、広い意味では意味解析の一種と言えるね。
まとめ:ざっくりこれだけ覚えればOK!
「意味解析」って出てきたら「構文は正しいけど意味的におかしい部分を見つける処理」と思えればだいたいOK!
📖 おまけ:英語の意味
「Semantic Analysis」 = 意味の解析
💬 semantic は「意味の」という意味で、プログラムの意味レベルの正しさを分析する工程だよ