当前位置:  开发笔记 > 编程语言 > 正文

Lex/Yacc for C#?

如何解决《Lex/YaccforC#?》经验,为你挑选了4个好方法。

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

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

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

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



1> Andy Mortime..:

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

GPPG可以发现这里和GPLEX 这里.

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


就像面包屑一样,GPPG现在可以在http://gppg.codeplex.com/上找到,GPLEX是http://gplex.codeplex.com/

2> Anton Gogole..:

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

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



3> Kris Erickso..:

另请参阅Antlr,它具有C#支持.



4> KristoferA..:

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


如果有人想知道,它已经死了:http://en.wikipedia.org/wiki/Oslo_(Microsoft)和http://en.wikipedia.org/wiki/M_(programming_language)
推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有