22

实际上,也许不是成熟的 Lex/Yacc。我正在实现一个命令解释器前端来管理一个 webapp。我正在寻找可以接受语法定义并将其转换为直接调用我的对象上的方法的解析器的东西。类似于 ASP.NET MVC 如何确定调用哪个控制器方法,以及如何计算参数。

因此,如果用户在我的命令提示符下键入“create foo”,它应该透明地调用一个方法:

private void Create(string id) { /* ... */ }

哦,如果它可以从那些控制器方法的(例如)属性中生成帮助文本,那也太棒了。

4

12 回答 12

15

我已经使用 GPLEX/GPPG 完成了几个小项目,它们是 C# 中 LEX/YACC 的非常简单的重新实现。我没有使用上述任何其他工具,所以我无法真正比​​较它们,但这些都很好用。

GPPG 可以在这里找到, GPLEX 可以在这里找到。

话虽如此,我同意,一个完整的 LEX/YACC 解决方案可能对你的问题来说太过分了。我建议使用 IronPython 生成一组绑定:它可以轻松地与 .NET 代码交互,非程序员似乎发现基本语法相当可用,如果您选择使用它,它会给您很大的灵活性/功能。

于 2010-03-31T10:53:40.503 回答
11

我不确定 Lex/Yacc 是否会有所帮助。您只需要一个基本的分词器和一个解释器,它们的手写速度更快。如果您仍在解析路线,请参阅Irony

作为旁注:您是否考虑过 PowerShell 及其命令行开关?

于 2009-02-12T09:29:32.743 回答
11

另请查看具有 C# 支持的Antlr 。

于 2009-03-19T14:34:41.453 回答
5

仍然是早期的 CTP,因此不能用于生产应用程序,但您可能对 Oslo/MGrammar 感兴趣:http: //msdn.microsoft.com/en-us/oslo/

于 2009-02-12T09:36:01.840 回答
4

Jison 最近受到了很多关注。它是 javascript 的 Bison 端口。由于它非常简单,我将 jison 解析/词法分析模板移植到 php,现在移植到 C#。它仍然很新,但如果你有机会,可以在这里看看:https ://github.com/robertleeplummerjr/jison/tree/master/ports/csharp/Jison

于 2013-04-21T15:43:11.890 回答
3

如果您不惧怕 alpha 软件并且想要替代 Lex / Yacc 来创建您自己的语言,您可能会考虑Oslo我建议您仔细阅读去年 PDC的 TL27 和 TL31 会议的会议录音。TL31 直接解决了使用 Oslo 创建领域特定语言的问题。

于 2009-02-12T09:39:59.303 回答
3

Coco/R 是一个带有 .NET 实现的编译器生成器。您可以尝试一下,但我不确定让这样的库工作是否比编写自己的标记器更快。

http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/

于 2009-02-12T09:41:37.007 回答
3

我建议csflex - flex 的 C# 端口 - 最著名的 unix 扫描仪生成器。

于 2009-02-12T10:44:42.487 回答
3

我相信 lex/yacc 已经在其中一个 SDK 中(即 RTM)。Windows 或 .NET Framework SDK。

于 2009-03-02T03:22:51.623 回答
3

Gardens Point Parser Generator此处为 C# 提供 Yacc/Bison 功能。可以在 这里下载。此处提供了一个使用 GPPG 的有用示例

于 2012-05-11T16:51:02.663 回答
1

正如 Anton 所说,PowerShell 可能是要走的路。如果你确实想要一个 lex/yacc 实现,那么Malcolm Crowe有一个很好的设置。

编辑: 直接链接到编译器工具

于 2009-02-12T09:31:49.557 回答
1

仅作记录,在 C# 中为 C# 实现词法分析器和 LALR 解析器:

http://code.google.com/p/naive-language-tools/

它的使用应该与 Lex/Yacc 类似,但是这些工具 (NLT) 不是生成器!因此,忘记速度。

于 2012-12-12T20:41:50.217 回答