Ocaml 可以让几个lexer共享相同的ident定义吗?

Ocaml 可以让几个lexer共享相同的ident定义吗?,ocaml,lex,lexical-analysis,ocamllex,Ocaml,Lex,Lexical Analysis,Ocamllex,我有几个lexer:lexer_1.mll,lexer_2.mll ident(let ident=regexp)的一些定义在这些文件中很常见并重复。例如,INTEGER,FLOAT 有人知道是否可以在某个地方将它们定义为一次性的,并让.mll文件调用它吗?恐怕没有“纯OCaml”解决方案,因为ident似乎是由ocamlex系统地内联的。您仍然可以将regexp定义放在一个文件中,并使用cpp(或任何其他C预处理器)来#在需要的地方包含它。这当然是对cpp的滥用,因为您没有向它提供.c文件,但

我有几个lexer:
lexer_1.mll
lexer_2.mll

ident
let ident=regexp
)的一些定义在这些文件中很常见并重复。例如,
INTEGER
FLOAT

有人知道是否可以在某个地方将它们定义为一次性的,并让
.mll
文件调用它吗?

恐怕没有“纯OCaml”解决方案,因为
ident
似乎是由
ocamlex
系统地内联的。您仍然可以将regexp定义放在一个文件中,并使用
cpp
(或任何其他C预处理器)来
#在需要的地方包含它。这当然是对
cpp
的滥用,因为您没有向它提供
.c
文件,但您不是第一个这样做的人


事实上,我刚刚遇到了一个类似cpp的实用程序,目标是OCaml程序,您可能会发现它很有用。

对不起,请您再解释一下“使用好的ol
cpp
#include
”?cpp是C预处理器。您可以使用C预处理器的
#include
指令通过文本包含来完成您想要的操作。大多数系统定义一个程序
cpp
,用于独立于C编译器使用预处理器。这种用法并不少见,尽管存在一些词汇上的不一致带来的不便。杰弗里·斯科菲尔德(Jeffrey Scofield)完美地回答了你的评论。我编辑了答案并添加了指向指向OCaml文件的预处理器的链接。