试图为bison/wisent构建一个C#语法

Che*_*eso 11 c# emacs yacc bison

我以前从未做过Bison或Wisent.
我该如何开始?

我的真正目标是为C#生成一个有效的Wisent/Semantic语法,允许在带有代码完成的emacs中编辑C#,以及所有其他CEDET好东西.(对于那些不知道是谁,野牛之是一个与Emacs口齿不清端口GNU野牛,这是纳入CEDET. 野牛之显然是欧洲野牛.野牛,我把它,是一出戏,对词的派生YACC.而CEDET是Emacs开发工具的集合.所有人都赶上了?我不打算尝试定义emacs.)

Microsoft在语言参考文档中为C#提供了BNF语法,包括所有LINQ扩展.我能够将其转换为成功编译的.wy文件semantic-grammar-create-package.

但编译后的语法并没有"起作用".在某些情况下,语法"查找" enum声明,但不是class声明.为什么?我不知道.我无法识别属性.我发现语法的"调试"并不容易.

我想我会退后一步,尝试为一种简单易懂的语言制作一个明智的语法,这种语言只有几个关键词.只是为了获得一些经验.即便如此,这也是一个挑战.

我已经看过关于语法fw的.info文档,并且很明智,但是......仍然有些东西并没有真正为我澄清,这些东西是如何真正起作用的.

所以

Q1:有关在emacs中调试明智语法的任何提示吗?有没有办法在语法上运行一个"类似lint"的东西来找出是否有未使用的规则,这样的死胡同?如何能够观察解析器的运行情况呢?有这样的吗?

Q2:关于加速野牛/一般情况的任何提示?我正在考虑的是一种工具,可以让我深入了解规则的运作方式.提供一些透明度的东西,而不是"我没有工作"的经验,我现在正在使用Wisent.

问题3:我应该放弃并成为一名有机农民,而不是继续打击这一点吗?


ps:我知道CEDET/semantic的contrib目录中现有的C#语法.这件事有效,但是......它不支持最新的C#规范,包括LINQ,部分类和方法,yield,匿名方法,对象初始化器等等.此外,它主要解析一堆C#代码.它嗅出了类和方法,然后挽救了.即使是foreach循环也没有做得很好.尽管它很好,但我希望看到它更好.我正在尝试做的是使它成为当前的,并且还扩展它以解析更多的C#代码.

Eri*_*ric 3

您可能想查看语义/明智目录中的计算示例。它非常简单,还展示了如何使用 %left 和 %right 功能。它将“执行”代码而不是将其转换为标签。其他一些简单的语法包括 cogre 中的“dot”解析器和 srecode 中的 srecode 解析器。

对于明智的调试,菜单中有一个详细标志,尽管说实话我没有尝试过。还有wisent-debug-on-entry,它允许您选择一个操作,该操作将导致Emacs 调试器在该操作中停止,以便您可以查看值是什么。

较旧的“bovine”解析器有一个调试模式,允许您单步执行规则,但它从未移植到wisent。这是我在编写明智的解析器时非常怀念的一个功能。