トップ
新規
単語検索
ヘルプ
camlp5
をテンプレートにして作成
開始行:
* camlp5 [#u6668308]
- http://pauillac.inria.fr/~ddr/camlp5/
- OCaml 3.09 までの camlp4 が名前をcamlp5と名前を変えて配...
-- OCaml 3.10 以降の camlp4 はそれまでの camlp4 と全く互...
-- Coq 等で使われている
-- 現行の camlp4 は undocumentedな部分が多いため camlp4 ...
-- 旧camlp4を使っているレガシーコードを新camlp5に移行する...
** チュートリアル [#k7553218]
- [[古いcamlp4のチュートリアル:http://caml.inria.fr/pub/d...
- [[Tutorial: How to customize the syntax of OCaml, using...
** とりあえず使ってみる [#ue166d23]
- hello.ml を構文解析して、そのままpretty printする
camlp5 pr_o.cmo pa_o.cmo hello.ml
-- pr_* は pretty printer, pa_* は パーザ
-- *_o は original syntax, *_r は revised syntax
** q_MLast.cmo [#pc10172c]
ML構文のquotationを有効にする構文拡張?
camlp5 q_MLast.cmo pr_o.cmo pa_o.cmo test.ml
* メモ [#o7bebed6]
** パス式の扱いの違いについて [#bf88477f]
- 次の2つの場合でパス式C.cの表現が異なる
-- C.c x (xへの関数C.cの適用)
-- new C.c (クラスC.cのnew)
- それぞれ次のようになる:
MLast.ExAcc (loc, MLast.ExUid (loc, "F"), MLast.ExLid (l...
MLast.ExNew (loc, ["C"; "c"])
-- 前者は ExAcc で UidとLidを結合, 後者は string list な...
- 他にもあるかも
** 旧camlp4 (3.08) からの移植 [#z1f5bf3e]
- どうもocaml 3.08あたりまでのcamlp4は antiquote の $lid:...
-- $Grammar.Entry.parse Pcaml.expr (Stream.of_string 文字...
--- これを真似した: http://cristal.inria.fr/~ddr/camlp5/...
-- たとえば expr なら Pcaml.expr, class_expr なら Pcaml.c...
- 同じく3.08あたりのcamlp4と antiquotationの種類が異なる...
inherit $lid: str$
などとすると
Parse error: illegal begin of class_expr_eoi
と怒られる。 strの内容にもよるが
inherit $Grammar.Entry.parse Pcaml.class_expr (Stream.of...
とするか、
inherit $list: [str]$
とする(''後者はcamlp5 6系でエラー'').
- 3.08 ではpr_o.cmoがデフォルトで標準出力に出力したようだ...
-- ファイル名が空と判定されて
Fatal error: exception Sys_error(": No such file or dire...
と言われて落ちる。
Pcaml.input_file := "-";
とすれば標準出力に出るようになった。
- ここまで調べたことを使って [[O'Jacare:http://www.pps.ju...
終了行:
* camlp5 [#u6668308]
- http://pauillac.inria.fr/~ddr/camlp5/
- OCaml 3.09 までの camlp4 が名前をcamlp5と名前を変えて配...
-- OCaml 3.10 以降の camlp4 はそれまでの camlp4 と全く互...
-- Coq 等で使われている
-- 現行の camlp4 は undocumentedな部分が多いため camlp4 ...
-- 旧camlp4を使っているレガシーコードを新camlp5に移行する...
** チュートリアル [#k7553218]
- [[古いcamlp4のチュートリアル:http://caml.inria.fr/pub/d...
- [[Tutorial: How to customize the syntax of OCaml, using...
** とりあえず使ってみる [#ue166d23]
- hello.ml を構文解析して、そのままpretty printする
camlp5 pr_o.cmo pa_o.cmo hello.ml
-- pr_* は pretty printer, pa_* は パーザ
-- *_o は original syntax, *_r は revised syntax
** q_MLast.cmo [#pc10172c]
ML構文のquotationを有効にする構文拡張?
camlp5 q_MLast.cmo pr_o.cmo pa_o.cmo test.ml
* メモ [#o7bebed6]
** パス式の扱いの違いについて [#bf88477f]
- 次の2つの場合でパス式C.cの表現が異なる
-- C.c x (xへの関数C.cの適用)
-- new C.c (クラスC.cのnew)
- それぞれ次のようになる:
MLast.ExAcc (loc, MLast.ExUid (loc, "F"), MLast.ExLid (l...
MLast.ExNew (loc, ["C"; "c"])
-- 前者は ExAcc で UidとLidを結合, 後者は string list な...
- 他にもあるかも
** 旧camlp4 (3.08) からの移植 [#z1f5bf3e]
- どうもocaml 3.08あたりまでのcamlp4は antiquote の $lid:...
-- $Grammar.Entry.parse Pcaml.expr (Stream.of_string 文字...
--- これを真似した: http://cristal.inria.fr/~ddr/camlp5/...
-- たとえば expr なら Pcaml.expr, class_expr なら Pcaml.c...
- 同じく3.08あたりのcamlp4と antiquotationの種類が異なる...
inherit $lid: str$
などとすると
Parse error: illegal begin of class_expr_eoi
と怒られる。 strの内容にもよるが
inherit $Grammar.Entry.parse Pcaml.class_expr (Stream.of...
とするか、
inherit $list: [str]$
とする(''後者はcamlp5 6系でエラー'').
- 3.08 ではpr_o.cmoがデフォルトで標準出力に出力したようだ...
-- ファイル名が空と判定されて
Fatal error: exception Sys_error(": No such file or dire...
と言われて落ちる。
Pcaml.input_file := "-";
とすれば標準出力に出るようになった。
- ここまで調べたことを使って [[O'Jacare:http://www.pps.ju...
ページ名: