mincaml-jsはocamlのサブセットからJavaScriptへ変換するトランスレータ言語です。 トランスレータにのみ特化することで、シンプルさを維持します。 mincaml-jsはmincamlにいくつかの機能が追加されています。
src,src2,src3,scalaへそれぞれ移動してmakeを実行します。
$ make
使い方は以下のように./mincaml [拡張子なしのファイル名]
で、.mlファイルから.jsファイルを生成し、NodeJSで実行します。
$ ./mincaml test/fib
$ node test/fib.js
mincaml2jsには、4つのバージョンがあります。
- ocamlyacc によるバージョン
- パーサコンビネータによるバージョン
- scalaのパーサコンビネータによるバージョン
- より奇麗なJavaScriptの出力バージョン
$ make do_test
- ocamlyaccバージョン
- パーサコンビネータバージョン
- Scalaバージョン
- mincaml2js.scala Scalaバージョン(1ソース)
- より奇麗なJavaScriptの出力バージョン
-
ファイルの整理
-
ドキュメント
- 簡単な変換
- より高度な変換
-
仕様追加
- begin end
- パターンマッチング構文
- match e with | p1 -> e1 | ... | pn -> en
- _
- 値バインディング
- ネストした値バインディング
- ネストした値の比較
- whenによるガード
- asでの値バインディング
- | A(a) | B(a) when a > 0 -> a
- リスト
- [e1;...;en]でのリストの構築
- e::el によるリストへの追加
- e @ e でのリストの結合
- Listモジュール
- 代数データ型
- type i = I of int;; I(11)
- タプル type i = Add of i * i | Int of i
- リストの使用 type i = I of int list
- 文字列
- 文字列リテラル
- リファレンス
- レコード
- トップレベル
- let a = b
- let rec a = b
- exp
- type a = b
- open
- module = struct ... end
- 最適化
- α変換 alpha
- javascript変換 javascript
- インライン展開 inline
- ネストしたletの簡約 assoc
- 定数畳み込み constfold
- 不要定義削除 elim
- ユーザー定義オペレーター