我正在寻找可以提供给 fsyacc 的 C# v4 的 BNF 语法,或者如果我找不到可以输出 F# 的基于 EBNF 的解析器生成器。
编辑: 我不想为 C# 编写解析器,而是为非常相似的语法编写实验性解析器,并且由于两种语法之间存在巨大的文字重叠,我发现从 C# 语法开始更容易,只需更改偏离的位. 然而,我发现的唯一 C#v4 语法是 EBNF
另一个答案是从 EBNF 到 BNF 的转换器
我在这里找到了一些语法;它们似乎包含高达 C# 4.0。
根据维基百科,Coco/R 是一个基于 EBNF 的解析器生成器。根据他们的主页,Coco/R 有一个 F# 端口(不过,最后更新时间是 2007-07-23,所以我预计会有一些重大变化)。如果你最终检查出来,我会对你的经历感兴趣。
我确实找到了 C# v2 的 BNF 语法:http: //www.devincook.com/GOLDParser/grammars/index.htm
扩展我之前的评论 - 我认为 C# 没有任何可靠的语法可以直接使用。有一些示例,但它们可能不会涵盖所有新功能(如 LINQ),或者不会经过很好的测试。
我能想到的最佳选择是在 Mono 中使用 C# 编译器中的解析器。这是用 C# 编写的,开源的,包括所有最近的功能(并且也相当可靠)。有关详细信息,请参阅Mono C# 编译器。您应该能够从 F# 编译并使用它(或将其修改为对 F# 更友好)。