0

この便利な一連のブログ投稿に従ってCamlp4を探索していますが、コンパイルの問題が発生しています。これは私のtest.mlファイルのコードです:

open Camlp4.PreCast

let _loc = Loc.ghost in

let cons =
 let rec loop () =
   try
     match read_line () with
       | "" -> []
       | c -> c :: loop ()
   with End_of_file -> [] in
 loop () in
 Printers.Ocaml.print_implem
 <:str_item<
    type t =
    $Ast.TySum (_loc,
           Ast.tyOr_of_list
             (List.map
                 (fun c -> <:ctyp< $uid:c$ >>)
                 cons))$
    let to_string = function
    $Ast.mcOr_of_list
    (List.map
          (fun c -> <:match_case< $uid:c$ -> $`str:c$ >>)
        cons)$
    let of_string = function
    $let ors =
   Ast.mcOr_of_list
     (List.map
         (fun c -> <:match_case< $`str:c$ -> $uid:c$ >>)
         cons) in
    Ast.McOr(_loc,
           ors,
             <:match_case< _ -> invalid_arg "bad string" >>)$
>>

私はこのコンパイルコマンドを使用しています:ocamlc -pp camlp4of -I + camlp4 -o Variant camlp4lib.cma test.mlしかし、ocamlcは次を発行します:エラー:バインドされていないモジュールPrinters.Ocaml

コンパイルコマンドの問題だと思いますが、Printers.Ocamlが実装されている場所がわかりません。

ご協力ありがとうございました!_神父

4

2 に答える 2

3

あなたはにアクセスしようとしています、あなたのCamlp4.PreCast.Printers.OCaml.print_implem後にアクセス可能; vsの大文字と小文字の違いに注意してください。は標準であり、OCamlツールとドキュメント全体で一貫して使用する必要があります(コンパイラとともに配布されているライブラリの一部が規則に違反している場合は、マイナーなバグレポートを提出できます)。open Camlp4.PreCastPrinters.OCaml.print_implemOCamlOcamlOCaml

PS:ちなみに、OCamlの次のバージョン(4.01)はおそらく次のエラーメッセージを出力します(開発バージョンでテスト済み)

File "test.ml", line 13, characters 1-43:
Error: Unbound module Camlp4.PreCast.Printers.Ocaml
Did you mean OCaml?
于 2012-11-23T09:48:42.607 に答える
0

申し訳ありませんが、私のエラーは、Printers.Ocamlが存在しません。Printers.OCaml(大文字のC)が存在します。

私はこれを2日間試していました。

解決しました。

于 2012-11-23T09:48:29.437 に答える