2009-07-01から1ヶ月間の記事一覧

束縛

ふとした疑問。 gosh> ((lambda (x x) x) 1 2) 1 へぇぇ。 MzSchemeはエラーだった。 ついでに。 Fierfox alert(function(x, x) {return x;}(1, 2)); // 2 へぇぇ。

Schemeをつくろう(22) - JavaScriptのメモ

JavaScriptでSchemeを作る為に必要なことをメモっとく。 字句解析 tokenize = function(src) { return src.match(/\(|\)|'|[^\s()']+/g); }; // tokenize("(hello Javascript and Scheme world !!)") // => #(( hello Javascript and Scheme world !! )) 配…

Biwa Schemeを読む(3) - コンパイラ〜インタプリタ

ここからが本題。CompilerとInterpreterは一緒に読んだ方がよさげ。Biwa Schemeの中間言語は[命令,値(複数),次の命令]という形になっていて再帰的な構造をしているようだ。 命令一覧 halt 終わり。 constant 値 レジスタに値を入れる。 argument レジスタの…

Biwa Schemeを読む(2) - パーサー

まずはパーサーを読む。2段階に分けてある様子。 トークンに分ける(tokenize) 一気にS式に変換するのではなく、文字列をトークンに分解している。 S式に変換(getObject) 型付けをしながらS式に変換。 正規表現があると楽チンらしい。 感想など ここまでは今…

Biwa Schemeを読む(1) - データ構造

stackbase.jsを読み進める。データ構造を理解していこう。 環境系 TopEnv トップクラスの環境。いわゆるグローバル変数とか、グローバル関数だとか。 CoreEnv 今のところ謎。 Symbols シンボルテーブル。Symbolクラスが入ってる。 データ構造 eof なんだろ。…

Biwa Schemeを読む(0) - 斜め読み

仮想マシン クロージャやら末尾再帰の最適化やら継続やらをなんとか理解できるようになってきた。しかし、中間コードを生成し, 仮想マシンで・・・と言われると何のことやらちんぷんかんぷんだ。 こんな感じ? 僕のイメージとしては、パーサーを通してS式に…

caseには式

久しぶりに更新してみるよ。 var k = 3; switch (k) { case 1 + 2 : alert("caseに式が使えるよ!"); break; } ifと変わらん。