11月 2nd, 2009 admin 

今回は第12章構文木の構築をやりました。
メモ
・Rubyプログラムは構文木に変換される
・構文木のノードはNODE型で表される
・ノードはRubyオブジェクトなのでガーベージコレクタが生成・解放を行う
・ノードにはファイル名、行番号が保持されている
・葉・・・リテラル、変数参照など
・枝・・・ifなど
・elsifとelse ifは構文木になると違いはない
・優先順位の違いも構造がその情報を含んでいるのでandと&&なども同じになる
・「32-(10+8)」とあるが「32-(11+8)」(正誤表より)
・意味解析・・・変数を定義前に使っていないかなどのエラーはここで補足
・value_expr()で末尾再帰の除去のテクニックが使われている、こっちのほうが速いそうだ
・ローカル変数が定義されるのは「現れたとき」
・ローカル変数、ブロックローカル変数はst_tableで管理されていない(スコープ管理のため?)
・しかもブロックローカル変数はローカル変数と実装が違う(なぜ?)
・図12.12はlequeさんのブログで補足して下さった(bbとeの間にもヘッダが必要じゃねの?という件。結果=>必要)
まとめ
・ローカル変数が「現れたとき」に定義されるというのが気持ち悪いなと思った。「初期化されたら」のほうがわかりやすい気がするが
・構文木っていうのが具体的にイメージできた。本などではツリーの絵が描いてあるが、それより横向きのフローチャートのような図で書いたらすんなり頭に入った。枝とか葉とかは名前としてはいいが、解説に使われるとわかりにくい気がする。
・次回は第3部 第13章 評価器から
・次から『Rubyソースコード完全解説』正誤表はきちんと見よう
・RGHが終ったらなにをやりたいか
-なんか成果物が残るものがいいんじゃないか
-Prolog => 脈絡が無さ過ぎるらしい
-Coq入門と証明駆動開発 => フランス語の文献を読む必要があるらしい
-データベースを作る => もうすぐ俺俺DB開発のブームが来る
-ふつうのコンパイラ読書会 => CSNagoyaの正しい流れ