Lex / Yacc for C#?

问题描述 投票:20回答:12

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

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

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

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

c# parsing yacc
12个回答
11
投票

我不确定Lex / Yacc会有什么帮助。你只需要一个基本的标记器和一个解释器,它们可以更快地手动编写。如果您还在解析路线,请参阅Irony

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


3
投票

Gardens Point Parser Generator here为C#提供Yacc / Bison功能。它可以被下载here。使用GPPG的有用示例是here


1
投票

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

编辑:Direct Link to the Compiler Tools


1
投票

只是为了记录,在C#中为C#实现lexer和LALR解析器:

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

它应该与Lex / Yacc类似,但是那些工具(NLT)不是发电机!因此,忘记速度。


14
投票

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

GPPG可以找到here和GPLEX here

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


8
投票

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


5
投票

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


4
投票

Jison最近获得了很大的吸引力。它是javascript的Bison端口。由于它非常简单,我已将jison解析/ lexing模板移植到php,现在移植到C#。它仍然很新,但如果你有机会,请看一下:https://github.com/robertleeplummerjr/jison/tree/master/ports/csharp/Jison


3
投票

如果您不担心alpha软件并想要替代Lex / Yacc来创建自己的语言,那么您可以查看Oslo。我建议你参加last years PDC会议记录TL27和TL31。 TL31使用Oslo直接解决域特定语言的创建问题。


3
投票

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

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


3
投票

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


3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.