我正在尝试实现一个具有扩展解析功能的库。我决定使用 fsyacc,因为我从大学就知道它。不幸的是我遇到了以下问题。
我为我的语法头( Head )定义了一个类,并将其实现放在一个文件中。然后我将解析器定义为:
...
%start head
%type <Head> head
...
Fsyacc 生成分离模块(Parser)。为了成功,它必须按以下顺序编译:Head.fs
Parser.fs
为了使这个库类似于您在 .NET 中可以找到的库,我想向Head添加一个静态Parse方法。不幸的是,我需要使用Parser模块中的方法。
我知道这种类型的依赖可以用'和'运算符来解决,但它只适用于在一个文件中定义的类型。
有没有其他方法可以创建相互依赖的类型,即使它们位于单独的文件中?我一直在寻找像 C/C++ 中的声明/实现分离机制,但我找不到任何东西。