- Abstract=いかなる実体とも結びついていないもの
- コンパイラは、文が文法にそっているかをチェックするだけじゃダメ。
- それ以上のなにか(Semantic Actions)が必要
- 再帰降下パーサの場合、semantic actionはパーサーのなかにまき散らされている
- ML-Yaccの場合、生成ルールにくっつけて書かれる
SEMANTIC ACTIONS †
- 各要素(nonterminal/terminal)は意味的な値(semantic value)の型を持っている
- semantic actionは、その値を生成する
RECURSIVE DESCENT †
- semantic action=パーサ関数の返す値と、その関数が起こす副作用
- 各要素について、実装言語の型が関連づけられている
- Program 4.1が例ですよ。T'がちょっとトリッキー。左オペランドが書けているので、引数として渡している
ML-Yacc-GENERATED PARSERS †
- ML-Yacc用の文法のsetのそれぞれに、semantic actionがMLの式の形でannotateされる
- パーサがルールを還元するたびに、そのsemantic actionが実行される
ABSTRACT PARSE TREES †