在OCamllex中使用StringMap

时间:2014-02-20 03:50:24

标签: ocaml ocamllex

我正在尝试编写一个OCamllex解析器,它从列表中构造单词的字符串映射。但是,当我尝试在标题中打开StringMap模块时收到“Unbounded module”错误:

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

当我没有明确打开模块时,以及当我尝试在预告片中创建地图时,会发生同样的错误:

module StringMap = Map.Make (String)

所有OCaml教程都建议我使用正确的语法;所以也许我误用了OCamllex(?)我承认,标题,规则和预告片的范围对我来说并不清楚。我在文档中搜索了解决方案,但针对OCamllex的教程很少。任何人都能说出推断我做错了什么吗? OCamllex是否允许使用StringMap模块?

1 个答案:

答案 0 :(得分:1)

问题在于不存在StringMap模块:您必须使用诸如module StringMap = Map.Make (String)之类的仿函数应用程序生成一个模块。将其放在标题中,而不是预告片中。 (预告片代码将放置在生成的文件的末尾,因此在您的词法分析器代码中无法看到其中建立的绑定。)

如果您愿意,也可以打开模块:

open module StringMap = Map.Make (String)

尽管如此,开放模块被认为是一种糟糕的风格。特别要避免打开诸如MapSet的应用程序之类的模块,因为它们对compare的定义会影响Pervasives中的常规应用程序并产生混淆。