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