問題タブ [camlp4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parsing - camp4: Ast.TySum を照合して Ast.TyOr を取得する方法
私はocamlp4が初めてです。私はそれを始めるためにJake Donham のブログを読んでいます。
次のような単純な型を取得する小さな CamlP4 プログラムを作成しようとしています。
t_of_string
と関数を生成しt_to_string
ます。
ブログのコードに従って、タイプを次のように一致させることができるはずです。
しかし、これはうまくいきません。ASTを見campl4of xx.ml -printer o
て、興味深い部分に減らします:
しかし、私は次のようなものと一致する必要があります
match ケースの AST に spurious があるようですがTySum
、それを取り除くことができませんでした。
誰かがその解決策を持っていますか?
ocaml - OCamlbuild と camlp4.macro
OCaml ソース ファイルのいくつかが IFDEF を使用しているプロジェクトがあります。このプロジェクトのすべての .ml ファイルを camlp4.macro で前処理する必要があることを OCamlbuild に伝える簡単な方法はありますか?
ocaml - OCamlbuild と camlp4 のオプション
条件付きコンパイルを有効にするために camlp4.macro を使用しています。「use_jscore」でタグ付けされた特定のファイルを特定の camlp4 オプションで前処理する必要があることを OCamlbuild に通知する際に問題が発生しています。これが私が現在持っているものです:
しかし、これは OCamlbuild によって完全に回避されます。私は ocamlfind を使用しているので、基本的に OCamlbuild に伝えたいことは、「use_jscore」でタグ付けされたすべての OCaml ファイルは、-DUSE_JSCORE オプションも指定された camlp4.macro によって前処理する必要があるということです。
ocaml - 戻り値sexpで型に注釈を付けると、バインドされていない値int_of_sexpが発生するのはなぜですか?
オンラインの多くの簡単な例で示されているように、sexplib 構文拡張を使用して、型のシリアル化コードを自動的に生成します。
でコンパイルに失敗しますError: Unbound value int_of_sexp
。
ocaml - camlp4o が 2 項関数として解析 (または) できないのはなぜですか?
バニラの OCaml では、他のすべての(or)
関数と同じように 2 項関数な(+)
ので、次のようなコードは問題なく動作します。
ただし、camlp4o がロードされている環境では、次のように解析できません。
一方、(+)
その他の整数算術演算子は、どちらの環境でも引き続き期待どおりに機能します。
どうしてこれなの?これは camlp4o の制限ですか、それともバグですか? これは OCaml 3.12.1 で発生します (OS X 10.7.4 では、GODI ブートストラップ経由で新しくインストールされます)。
ocaml - camlp4にパッチを適用するためのベストプラクティスは?
パッチをコミットしてINRIAがマージされるのを待つのは時間がかかり、私の作業は常に遅れていました。そこで、camlp4のブランチを作成しましたが、少し変更を加えるたびに、コンパイラ全体を作成する必要があり、時間がかかります。あなたのベストプラクティスは何ですか?(ばかげたミスをしてすみません)
(camlp4の分岐は比較的安全だと思います。少なくとも、バイナリ互換性が保証されています)
ocaml - ocamlbuildを使用してcamlp4にオプションを渡す
プロジェクトのビルドプロセスを簡素化するために、ocamlfindに対するocamlbuildのネイティブサポートを使用しています。ファイルfoo.ml
は、camlp4のマクロを使用した条件付きコンパイルに依存しています。この_tags
ファイルには次のものが含まれています。
これはうまく機能しますが、camlp4にオプションを渡すのに問題があります。ocamlbuild + ocamlfind自動化を使用しない場合、コマンドラインは次のようになります。
しかし、-DFOO
ocamlbuild + ocamlfindを使用するときにcamlp4に変数を渡すにはどうすればよいですか?をいじる代わりに、単純なコマンドラインオプションがあるべきだと思いますmyocamlbuild.ml
。
ocaml - Camlp4の例:バインドされていないモジュールPrinters.Ocaml
この便利な一連のブログ投稿に従ってCamlp4を探索していますが、コンパイルの問題が発生しています。これは私のtest.mlファイルのコードです:
私はこのコンパイルコマンドを使用しています:ocamlc -pp camlp4of -I + camlp4 -o Variant camlp4lib.cma test.mlしかし、ocamlcは次を発行します:エラー:バインドされていないモジュールPrinters.Ocaml
コンパイルコマンドの問題だと思いますが、Printers.Ocamlが実装されている場所がわかりません。
ご協力ありがとうございました!_神父
ocaml - camlp4で文法規則を定義するときの_loc変数の目的は何ですか?
_loc
変数は、関数に渡される引数として、式の文法規則のここに表示されます。match ... with
mk_sequence
ただし、mksequence
の関数本体では使用されません。
この_loc
変数は、文法規則の他の 場所にも表示されます。
camlp4コード生成チュートリアルでは、それは_loc
場所を表すと書かれています。でも、その説明がよくわかりません。_loc
誰かが未使用の変数を渡す目的を私に説明できますか?