タイガー意味解析

タイガーっていうと、タイガーマイコンジャー炊きたて♪
ってのがありますね。おなかすいた。

えーと、意味解析を読み始めました。セマンティックスです。
意味解析といえば記号表ってのがまず出てきます。
記号表は要するに連想配列、マップ、ハッシュマップとかそこらへんです。
名前から値への表です。例えば、

int main() {
  int a = 10;
  int b = 20;
  return c(a, b);
}

int c(int d, int f) {
  int e(int d){
    d + 1;
  }
  return d + e(f);
}

こんなコードがあったら、例えばですが記号表はjsonで書くと以下のようなイメージになります。

{
  functions:{
    _main:{
      _a:"int",
      _b:"int",
      _c:"function",
      return:"int"
    },
    _c:{
      _d:"int",
      _f:"int",
      _e:{
        _d:"int",
        return: "int"
      }
      return:"int"
    }
  }
}

要するに変数から型への配列ですね。
で、スコープの概念があるので、eの関数からみるとdという変数の値は関数の引数なわけです。
という感じのことが書いてあります。
で、この表をどうやってつくるといいとか、値が変わらないようにした場合は
ああだ、こうだってことが書いてあります。
そこが重要なんですけど、結構、意味解析、記号表って字ずらは難しそうで、初めに見たときに
いやーな気持ちになってしまい、トラウマを抱えているので読み進め辛いのです。
ということで、怖くないよ。簡単だよ。という暗示をかけるために
こんなブログを書いてみました。