0

リストから単語の文字列マップを作成する OCamllex パーサーを作成しようとしています。ただし、ヘッダーで StringMap モジュールを開こうとすると、「Unbounded module」エラーが表示されます。

{
  open StringMap
  type token = EOF | Word of string
}
(* other code *)

モジュールを明示的に開かずにトレーラー内でマップを作成しようとすると、同じエラーが発生します。

module StringMap = Map.Make (String)

すべての OCaml チュートリアルは、私が正しい構文を使用していることを示唆しています。おそらく私は OCamllex(?) を誤用しているのかもしれませんが、ヘッダー、ルール、およびトレーラーの範囲が明確ではありません。ドキュメントで解決策を探しましたが、OCamllex を対象としたチュートリアルはほとんどありません。私が間違っていることを推測できる人はいますか?OCamllex では StringMap モジュールを使用できますか?

4

1 に答える 1

1

問題は、StringMapモジュールが存在しないことです: などのファンクター アプリケーションでモジュールを生成する必要がありますmodule StringMap = Map.Make (String)。これをトレーラーではなくヘッダーに配置します。(トレーラー コードは生成されたファイルの末尾に配置されるため、そこで確立されたバインディングはレクサー コード内からは見えません。)

必要に応じて、モジュールを開くこともできます。

open module StringMap = Map.Make (String)

ただし、モジュールを開くことは、やや貧弱なスタイルと見なされます。Map特に、およびのアプリケーションなどのモジュールを開くことは避けてくださいSet。これらの の定義はcompare、通常のものを覆い隠し、Pervasives混乱を招くからです。

于 2014-02-20T06:26:25.230 に答える