ベクタリテラル、文字リテラル
今まで対応していなかった、ベクタと文字のリテラルに対応した。
s式パーサとレキサを修正。r7rsによると、`#( は、トークンである。
sparser.mly
Sexp : | CHARV { Char $1 } | SHARPLPAREN Sexplist RPAREN { Vector $2 }
対話環境でテストしてみる。
# let a = sparse "#\\a";; val a : Syntax.sexp = Char 'a' # evalExp [] (parseExp a);; - : Parser.exp Valtype.valtype = CharV 'a' # let asd = sparse "#(a s d)";; val asd : Syntax.sexp = Vector [Id "a"; Id "s"; Id "d"] # evalExp [] (parseExp asd);; - : Parser.exp Valtype.valtype = VectorV [|SymbolV "a"; SymbolV "s"; SymbolV "d"|]
ベクタはs式としてはOCamlのリストで表現しているが、評価後の値の型はOCamlの配列を使っている。
文字のヘキサ表現、文字名表現には対応できていない。
ベクタ関連のライブラリ関数も追加した。