实际上,也许不是全面的Lex/Yacc.我正在实现一个命令解释器前端来管理webapp.我正在寻找一些能够进行语法定义并将其转换为直接调用我的对象上的方法的解析器的东西.类似于ASP.NET MVC如何确定要调用哪个控制器方法,以及如何编写参数.
因此,如果用户在命令提示符下键入"create foo",它应该透明地调用方法:
private void Create(string id) { /* ... */ }
哦,如果它可以从这些控制器方法的(例如)属性生成帮助文本,那也是很棒的.
我用GPLEX/GPPG完成了几个小项目,这些项目在C#中非常简单地重新实现了LEX/YACC.我没有使用上面的任何其他工具,所以我无法真正比较它们,但这些工作正常.
GPPG可以发现这里和GPLEX 这里.
话虽如此,我同意,完整的LEX/YACC解决方案可能对你的问题有点过分.我建议使用IronPython生成一组绑定:它可以轻松地与.NET代码接口,非程序员似乎发现基本语法相当可用,如果您选择使用它,它会为您提供很大的灵活性/功能.
我不确定Lex/Yacc会有什么帮助.你只需要一个基本的标记器和一个解释器,它们可以更快地手动编写.如果您还在解析路线,请参阅反讽.
作为旁注:您是否考虑过PowerShell及其命令行开关?
另请参阅Antlr,它具有C#支持.
仍然是早期的CTP所以不能在生产应用程序中使用,但您可能对Oslo/MGrammar感兴趣:http: //msdn.microsoft.com/en-us/oslo/