読者です 読者をやめる 読者になる 読者になる

本当は怖い情報科学

情報系大学院生の趣味&実益ブログ。

[通勤電車でScheme処理系日記] 8駅目 REPLが動いた

コツコツScheme処理系を書いています。多忙なので移動電車の中だけでの作業です。1.5h/day くらいの作業時間です。

インタプリタらしきものが動いたー。
ずっと作ってたバイトコード仮想マシンと、以前に作ってあったlexer・parserを接続して、REPL( read-eval-print loop )が動くようになりました。S式を評価して加減算ができます。

これからの作業としては…

  • GCを実装する(現在はmallocしてメモリ使い捨て放題)
  • コマンドラインオプション実装
  • 関数呼び出しをできるようにする
  • R6RSに定義されているプリミティブとライブラリ関数を実装
  • エラー処理

とかが必要ですねー。

$ ./yourzone
>>> (+ 1 2 3)
        LOADSYM pc =   0, sp =   0
        LOADVAL pc =   2, sp =   1
        LOADI   pc =   3, sp =   2
        LOADI   pc =   5, sp =   3
        LOADI   pc =   7, sp =   4
        CALL    pc =   9, sp =   5
        SWAP    pc =  11, sp =   2
        POP     pc =  12, sp =   2
        EOP     pc =  13, sp =   1
=> 6
>>> (+ (+ 1 2 3) (+ 4 5 6))
        LOADSYM pc =   0, sp =   0
        LOADVAL pc =   2, sp =   1
        LOADSYM pc =   3, sp =   2
        LOADVAL pc =   5, sp =   3
        LOADI   pc =   6, sp =   4
        LOADI   pc =   8, sp =   5
        LOADI   pc =  10, sp =   6
        CALL    pc =  12, sp =   7
        SWAP    pc =  14, sp =   4
        POP     pc =  15, sp =   4
        LOADSYM pc =  16, sp =   3
        LOADVAL pc =  18, sp =   4
        LOADI   pc =  19, sp =   5
        LOADI   pc =  21, sp =   6
        LOADI   pc =  23, sp =   7
        CALL    pc =  25, sp =   8
        SWAP    pc =  27, sp =   5
        POP     pc =  28, sp =   5
        CALL    pc =  29, sp =   4
        SWAP    pc =  31, sp =   2
        POP     pc =  32, sp =   2
        EOP     pc =  33, sp =   1
=> 21
【広告】