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

lisp on yarv製作日誌12

repl(read - eval - print - loop)で実行できるようにしました。 >(+ 1 2 3 4) 10 >(puts "hello, world") hello, world これをできるようにするためにコンパイラをlisp on yarvで書き直しました。こんな感じで実装しています。 (def (repl) (loop (block ()…

lisp on yarv製作日誌11

コンパイル結果としてrubyのソースを出力する処理系を書いてみました。 http://github.com/mas454/loy-yasm/blob/master/l2r.scm 今まで作ってきたlisp on yarvと同じコードがほとんど動きます。 ただ、クラスメソッドとインスタンスメソッドは、こんな感じ…

lisp on yarv製作日誌10

letを使えるようにしました。 こんな感じです。 (let ((a 10) (b 20)) (puts (+ a b))) #=> 30これはいったん、コンパイラの内部で、 (lamcall (-> (a b) (puts (+ a b))) 10 20)のように変換してからコンパイルしています。

lisp on yarv製作日誌9

作り始めて一月ぐらいたつのですが、肝心なcarとかcdrなどのリスト処理に関する関数を作っていなかったので、実装しました。 リストはrubyのArrayを利用して表現しています。例えば、(1 2)は[1, [2, nil]のようになります。listクラスみたいなのを作って 表…

lisp on yarv製作日誌8

クラスメソッドとインスタンスメソッドを呼び出せるようにしてみました。 Test.newのようにクラスメソッドを呼び出す場合、 (ccall Test new)ccallで呼び出せます。Test1::Test2.abc(10)の場合は、 (ccall (Test1 Test2) abc 10)のように呼び出せます。イン…