2010-05-01から1ヶ月間の記事一覧

Toy VM (11)

gauche vm の命令列をベクトルで取ってくる方法が分かった。もともと vm-code->list という手続きがあり、再帰的に実行するようにしただけ。 (というか別の方法が既に用意されているかもしれないけど) (use gauche.sequence) (define compile (with-module…

Toy VM (10)

土曜日が忙しかったので中途半端な状態だけど、まとめておこう。Gauche の VM は、ほとんど SECD マシンとして扱えそうだ。 SECD マシンは単なる状態遷移で、マクロで書ける。 プログラムをベクトルで持ち、プログラムカウンタを持たせた変形の SECD マシン…

状態遷移2

「C'」とかのクォートが後ろについたシンボルを実現するためだけにリードマクロ(#[])を書くのはやっぱりやりすぎだった。素直に|C'|と書こう。 INTERP> (def-transitions secd-1 "secd machine sample 2." ;; initial state -> transformed state ( s e (:NI…

状態遷移

Let Over Lambda を読むと、再びマクロが行えることの大きさが気になってきた。(今のところ LOL は難しくて半分も読めていないけど)今やろうとしていることは、SECDマシンの論文にまとめられている、綺麗な状態遷移の定義表。あれがそのままプログラムにな…

マクロ

データを定義して動くプログラムを書こうとしている。SECD マシンの状態遷移の定義が、そのままプログラムになるように。 実際は、SECD マシンのインタプリタなら、そのまま手で書いた方が簡単な位だけど。 INTERP> (def-transitions secd-1 ;; initial stat…

Toy VM (9)

細々と進めていた内容をまとめよう。SECD マシンから処理系のリストを取り常に動くものを改良していこう、という形で進めてきた。が、今となっては進め方は逆にすべきだったかもしれない。 つまり、タグ付きポインタで自前のリストを実装し、そのうえに SECD…