我正在尝试编写一个OCamllex解析器,它从列表中构造单词的字符串映射。但是,当我尝试在标题中打开StringMap模块时收到“Unbounded module”错误:
{
open StringMap
type token = EOF | Word of string
}
(* other code *)
当我没有明确打开模块时,以及当我尝试在预告片中创建地图时,会发生同样的错误:
module StringMap = Map.Make (String)
所有OCaml教程都建议我使用正确的语法;所以也许我误用了OCamllex(?)我承认,标题,规则和预告片的范围对我来说并不清楚。我在文档中搜索了解决方案,但针对OCamllex的教程很少。任何人都能说出推断我做错了什么吗? OCamllex是否允许使用StringMap模块?
答案 0 :(得分:1)
问题在于不存在StringMap
模块:您必须使用诸如module StringMap = Map.Make (String)
之类的仿函数应用程序生成一个模块。将其放在标题中,而不是预告片中。 (预告片代码将放置在生成的文件的末尾,因此在您的词法分析器代码中无法看到其中建立的绑定。)
如果您愿意,也可以打开模块:
open module StringMap = Map.Make (String)
尽管如此,开放模块被认为是一种糟糕的风格。特别要避免打开诸如Map
和Set
的应用程序之类的模块,因为它们对compare
的定义会影响Pervasives
中的常规应用程序并产生混淆。