21

.NET 是否有一个好的解析器生成器(想想 lex/yacc 或 antlr)?任何拥有不会吓到律师的执照的人?很多 LGPL,但我正在研究嵌入式组件,一些组织对我采用 LGPL 依赖项感到不舒服。

我听说 Oslo 可能会提供此功能,但我不确定它是构建时间依赖还是运行时依赖。谁能澄清奥斯陆将提供什么?

更新
我真正想要的是一个解析器生成器,它是一个仅构建时间的依赖项。看起来 ANTLR 有一个运行时组件。

4

5 回答 5

9

我刚刚发现 F# 附带了 yacc 和 lex 的实现。看起来我将能够利用这个解析器生成器来满足我的 .NET 需求。

F# 样本

Parsing 示例展示了如何使用 fsyacc 和 fslex 工具来构建用于 F# 的解析器和词法分析器。(模式:编译,运行:任何 CLI,包括 Mono)

相关博文:

于 2009-08-20T12:13:24.950 回答
8

嗯,你已经提到了 Antlr,所以我不确定你为什么不考虑它......

Antlr 生成 C# ( http://www.antlr.org/wiki/display/ANTLR3/Antlr%2B3%2BCSharp%2BTarget ) 并具有 BSD 许可证 ( http://www.antlr.org/license.html )限制很少。


Irony ( http://irony.codeplex.com/ ) 有相当多的下载和一个(很容易看的)MIT 许可证。似乎有完整的源代码,因此可以将其直接“嵌入”到您的应用程序中。

于 2009-08-10T21:28:14.457 回答
4

就我个人而言,我非常喜欢GOLD Parser Generator。它不直接生成任何代码,它只是为您提供 DFA 和 LALR 状态表,并让您编写自己的解析器引擎以满足您的需求。

这种构造事物的方式并不适合每个人或所有情况(你失去了一些灵活性,因为你的语言必须满足 LALR 限制),所以我不认为这是“正确的方式”,但我喜欢解析算法的分离从解析规则(这确实意味着任何运行时要求都完全在您的控制范围内)。

当然,您不必编写自己的引擎——例如,网站上列出了三个用 C# 编写的引擎。副手我不知道这些引擎使用什么许可证,但坦率地说,如果您发现许可证不受欢迎,那么编写自己的引擎是微不足道的。GOLD 包含对工作算法进行完整描述的文档,这是一个简单的状态机系统(正如您所期望的,如果您了解 LALR 解析)。当然,GOLD 程序本身可以免费使用。

GOLD 还包括一个用于编写语言语法的 IDE,这非常有用。

于 2009-08-20T12:25:49.383 回答
3

ANTLR 有一个运行时组件,但您始终可以使用它使用的几个类并将它们包含在您的项目中,此时您不再需要引用运行时程序集。它在 BSD 许可下获得许可 - C# 3 目标的 3 条款和 C# 2 目标的 4 条款。

于 2009-08-10T22:01:15.637 回答
1

您还可以尝试Malcolm Crowe 的 LEX/YACC 编译器工具。很多很好的例子。

于 2009-08-20T12:26:18.043 回答