ベクタリテラル、文字リテラル

今まで対応していなかった、ベクタと文字のリテラルに対応した。
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の配列を使っている。
文字のヘキサ表現、文字名表現には対応できていない。

ベクタ関連のライブラリ関数も追加した。