.NET是否有一个好的解析器生成器(想想lex / yacc或antlr)?任何拥有不会吓唬律师的执照的人?很多LGPL,但我正在研究嵌入式组件,一些组织对我采用LGPL依赖感到不舒服。
我听说Oslo可能提供此功能,但我不确定它是构建时依赖还是运行时依赖。任何人都可以澄清奥斯陆会提供什么吗?
更新
我真正想要的是一个解析器生成器,它只是一个构建时依赖项。看起来ANTLR有一个运行时组件。
答案 0 :(得分:9)
我刚刚发现F#附带了yacc和lex的实现。看起来我将能够利用这个解析器生成器满足我的.NET需求。
Parsing示例演示了如何使用fsyacc和fslex工具构建解析器和词法分析器以与F#一起使用。 (模式:编译,运行:任何CLI,包括Mono)
相关博文:
答案 1 :(得分:8)
嗯,你已经提到过Antlr所以我不确定你为什么不考虑它......
Antlr生成C#(http://www.antlr.org/wiki/display/ANTLR3/Antlr%2B3%2BCSharp%2BTarget)并拥有BSD许可证(http://www.antlr.org/license.html),似乎没有什么限制。
反讽(http://irony.codeplex.com/)拥有相当多的下载量和轻松的MIT许可证。似乎有完整的源代码,因此可以直接“嵌入”到您的应用程序中。
答案 2 :(得分:4)
我个人非常喜欢GOLD Parser Generator。它不会直接生成任何代码,它只是为您提供DFA和LALR状态表,并允许您编写自己的解析器引擎以满足您的需求。
这种构造事物的方式并不适合每个人或每种情况(因为你的语言必须符合LALR限制而失去一些灵活性),所以我并不认为这是“正确的方式”,但我喜欢分离从解析规则解析算法(并且它确实意味着任何运行时要求完全且容易在您的控制范围内)。
当然,你没有有来编写自己的引擎 - 例如,网站上列出了三个engines written in C#。副手我不知道这些引擎使用了哪些许可证,但如果你发现许可证不合适,那么编写自己的引擎实在是微不足道。 GOLD包含一个文档,它提供了一个工作算法的完整描述,这是一个简单的状态机系统(正如您所理解的,如果您理解LALR解析)。当然,GOLD计划本身是免费使用的。
GOLD还包括一个用于编写语言语法的IDE,这可能非常有用。
答案 3 :(得分:3)
ANTLR有一个运行时组件,但您始终可以使用它使用的少数几个类并将它们包含在项目中,此时您不再需要引用运行时程序集。它是根据BSD许可证获得许可的 - C#3目标的3条款和C#2目标的4条款。
答案 4 :(得分:1)
您也可以尝试Malcolm Crowe's LEX/YACC compiler tools。很多很好的例子。