boolean operatorに対応
http://github.com/mzp/scheme-abc/tree/master
bool値を返す演算子がいくつか使えるようになった。が、リテラルの#tや#fには対応していない中途半端っぷり。#tのパース、面倒そうだなぁ。
$ cat bool.scm (print (> 1 10)) $ ocamlbuild main.byte -- bool.scm Finished, 45 targets (44 cached) in 00:00:01. $ avmplus a.abc false
あと、今回から手でABCの命令を追加するのではなくコードジェネレータに生成させるようにした。
# Arith Add_i: op=0xc5; stack= ~-1 Subtract_i: op=0xc6; stack= ~-1 Multiply_i: op=0xc7; stack= ~-1 Divide: op=0xa3; stack= ~-1 ...
のようなテキストファイルから
let get_config = function | Add_i -> {default with op=0xc5; stack= ~-1} | Subtract_i -> {default with op=0xc6; stack= ~-1} | Multiply_i -> {default with op=0xc7; stack= ~-1} | Divide -> {default with op=0xa3; stack= ~-1} ...
のような関数や
type instruction = | Add_i | Subtract_i | Multiply_i | Divide
のような型宣言を生成するようにした。
これで、id:mzp:20080515:expressionの問題が解決したはず。