首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringMap在OCamllex中的应用

StringMap在OCamllex中的应用
EN

Stack Overflow用户
提问于 2014-02-20 03:50:23
回答 1查看 641关注 0票数 0

我正在尝试编写一个OCamllex解析器,该解析器从列表中构造一个字串映射。但是,当我试图在头文件中打开StringMap模块时,我会收到一个“无限模块”错误:

代码语言:javascript
复制
{
  open StringMap
  type token = EOF | Word of string
}
(* other code *)

当我没有显式打开模块时,以及当我试图在预告片中创建一个映射时,也会发生同样的错误:

代码语言:javascript
复制
module StringMap = Map.Make (String)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-20 06:26:25

问题是不存在StringMap模块:您必须使用函子应用程序(如module StringMap = Map.Make (String) )生成一个模块。把这个放在头上,而不是拖车里。(预告片代码将放在生成文件的末尾,因此在其中建立的绑定无法从您的lexer代码中看到。)

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

代码语言:javascript
复制
open module StringMap = Map.Make (String)

不过,开放模块被认为是有点糟糕的风格。特别是避免打开模块,例如MapSet的应用程序,因为它们对compare的定义会从Pervasives中隐藏通常的模块,从而产生混乱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21897707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档