2008-02-01から1ヶ月間の記事一覧

3imp ((lambda(x) x) 9) が実行される様子

3impの3章に出ているスタックベースのSchemeVMで ((lambda(x) x) 9)がどのように実行されるのかみてみた。コンパイル結果は以下のようになった。 ======================================================================== ((lambda (x) x) 9) => (frame (…

CUnit2.1.0 libcunit.so.1が見つからない

そろそろテストも書かないといかんなー、というわけで CUnit2.1.0を導入。 早速今作っているSchemeVM用のテストを書いてみた。 gcc -o vmtest vmtest.o -L/usr/local/lib -lcunitとして、できあがったものを実行してみると、エラーがでる。 libcunit.so.1: c…

3imp で (+ 3 4)を実行してみる

vmで各レジスタやスタックの中身をデバッグプリントするようにしたので入力されたコードが実行される様子がわかりやすくなった。例えば以下のコードは (run '(+ - * / cons car cdr a) (list + - * / cons car cdr 1) '(+ 3 4))このように表示される。(日本…

manコマンドでCライブラリ

Ubuntu 7.04で man fprintf などで、エントリーがない、と言われてしまうことに今更ながら気づいた。 sudo apt-get install manpages-devとして、表示されるようになった。

3impでプリミティブ関数

3impで紹介されているスタックベースのScheme処理系は、そのままではプリミティブ関数が実行できないのでちょっと細工してみた。まずはcompileを以下のように変更し、applyインストラクションに手続きに適用する引数の数を指定する。 . . 略 . [else (let lo…

3impのスタック機械

コンパイルしてできた命令列のリストを脳内でVMに渡してシミュレートする、という事をやってたんだけど、これじゃああまりにもあんまりなんで実行中のスタックや各レジスタの状態が一目でわかるようにVM関数のなかにデバッグprintをはさんでみた。まずは各レ…

Scheme処理系の作成

SICP -> 『プログラミング言語処理系』 -> ドラゴンブック と読み進んで、今、Scheme(R5RS)のサブセットの処理系をCで実装しています。 抽象構文木(AST)をたどりながら逐次実行していく、というSICPの4章に出てきたものをそのままCで実装しました、というよ…

 anything.el

emacs に anthing.elを導入しました。すごく便利で重宝してるんですが、(setq frame-title-format "%f")としてウィンドウバーにファイルのパスを表示してたのが、anyting.elを導入後からうまく表示されなくなってしまいました。う〜ん、これなんとかなんない…