我从来没有做过Bison或Wisent之前。
我该如何开始?试图为Bison/wisent构建C#语法
我的真正目标是为C#生成一个可用的Wisent/Semantic语法,允许C#在代码完成时在emacs中编辑,以及所有其他CEDET好东西。 (对于那些不知道的人来说,Wisent是一个Emacs-lisp端口GNU Bison,它包含在CEDET中,The Wisent显然是欧洲野牛,而我认为Bison是从YACC衍生而来的玩意儿。而且CEDET是Emacs开发工具的集合,所有这些都被抓住了吗?我不打算试着定义emacs。)
Microsoft为language reference document中的C#提供BNF语法,包括所有LINQ扩展。我可以将它翻译成一个.wy文件,该文件通过semantic-grammar-create-package
编译成功。
但编译的语法不“工作”。在某些情况下,语法“发现”声明enum
,但不声明class
。为什么?我不知道。我一直无法识别属性。 我没有发现语法的“调试”非常简单。
我以为我会退后一步,尝试为一种极其简单的语言(一种只有少数关键字的玩具语言)编写一个明智的语法。只是为了获得一些经验。即使这也是一个挑战。
我已经看到了关于语法fw和wisent的.info文档,但是......仍然那些东西对我来说并没有真正澄清,这些东西真的有效。
所以
Q1:关于调试在Emacs一个野牛之语法任何提示?有没有办法在语法上运行“类似皮棉”的东西来查明是否有未使用的规则,死胡同这样的东西?怎样才能观察解析器的行动?任何这样的事情?
Q2:关于提高野牛/智能一般速度的任何提示?我在想的是一个工具,可以让我深入了解这些规则是如何工作的。一些提供一些透明度的东西,而不是我现在用Wisent获得的“它没用”的体验。
Q3:我应该放弃并成为一名有机农民,而不是继续与之抗争?
ps:我知道CEDET /语义的contrib目录中现有的C#语法。这件事很有效,但是......它不支持最新的C#规范,包括LINQ,部分类和方法,yield,匿名方法,对象初始值设定项等等。此外,它主要用于解析一堆C#代码。它嗅出类和方法,然后退出。即使是foreach循环也没有完全正确。尽管如此,但我希望看到它会更好。我想要做的就是使其成为最新的,并且扩展它来解析更多的C#代码。