我有几个词法分析器:lexer_1.mll
,lexer_2.mll
,...
ident
(let ident = regexp
)的某些定义很常见,并在这些文件中重复出现。例如,INTEGER
,FLOAT
,...
有没有人知道是否可以在某个地方定义一次,并让.mll
文件调用它?
答案 0 :(得分:2)
我担心没有“纯粹的OCaml”解决方案,因为ident
似乎系统地内联ocamllex
。您仍然可以将正则表达式定义放在一个文件中,并在需要的地方使用cpp
(或任何其他C预处理器)#include
。这当然是对cpp
的滥用,因为您没有使用.c
文件,但您不会是第一个这样做的人。
事实上,我刚刚遇到cppo,这是一个类似cpp的实用程序,目标是OCaml程序,你可能觉得它很有用。