【いみかいせき】
意味解析(コンパイラ) とは?
最終更新:
💡 文法だけでなく、型や名前のルールも確かめる番人
意味解析は、プログラムの型や名前の使い方などが言語の規則に合うかを調べる処理です。構文解析との違い、TypeScriptの型エラーの例、見つけられる誤りと限界を説明します。
📌 このページのポイント
構文解析とは何が違うの?
構文解析は、式や文の並びが文法に合うかを調べる。意味解析は、その名前が何を指すか、型の使い方が合うかなどを確かめるよ。TypeScriptで「let n: number = "hello";」と書くと、文の形は読めても、数値型へ文字列を代入しているので型検査のエラーになる。
文字列と数値を足したら、必ずエラー?
型以外にも調べるの?
変数や関数の名前がどの宣言を指すか、使える範囲か、引数が合うかなども確認する。名前と型などの情報を管理するシンボルテーブルは、そのための道具だよ。何をいつ検査するかは言語と実装によって違うんだ。
ASTを作ってから、全部まとめて調べるの?
意味解析に通れば、正しく動く?
すべてのバグが消えるわけではないよ。縦5、横4の面積を求めたいのに「5 + 4」と足してしまっても、数値の型としては正しい。利用者が求める結果か、実行時の条件は満たすかは、テストや確認も必要だね。
まとめ:ざっくりこれだけ覚えればOK!
「意味解析」って出てきたら「型や名前の使い方が、言語のルールに合うか確かめる処理」と思えばだいたいOK!
📖 おまけ:英語の意味
「Semantic Analysis」 = 意味の解析
💬 Semanticは意味の、Analysisは解析。コンパイラでは、書かれたプログラムを言語の規則に照らして解釈する処理を指すよ。