【发布时间】:2010-10-21 00:56:27
【问题描述】:
我正在尝试实现一个具有扩展解析功能的库。我决定使用 fsyacc,因为我从大学就知道它。不幸的是我遇到了以下问题。
我为我的语法头(Head)定义了一个类,并将其实现放在一个文件中。然后我将解析器定义为:
...
%start head
%type <Head> head
...
Fsyacc 生成分离模块(Parser)。为了成功,它必须按以下顺序编译:Head.fsParser.fs
为了使这个库类似于您在 .NET 中可以找到的库,我想向 Head 添加一个静态 Parse 方法。不幸的是,我需要使用 Parser 模块中的方法。
我知道这种类型依赖可以用'and'操作符解决,但它只适用于一个文件中定义的类型。
是否有任何其他方法可以创建相互依赖的类型,即使它们位于单独的文件中? 我一直在寻找像 C/C++ 中的声明/实现分离机制,但我不能什么都找不到。
【问题讨论】:
标签: .net f# mutual-recursion fsyacc