什么是好的C#编译器/编译器/解析器生成器?

Has*_*niH 23 c# parser-generator

我正在寻找一个解析器生成器,给出一个LL(k)语言的EBNF将给我一个C#解析器并生成EBNF中定义的类型的类.

Mar*_*wis 24

ANTLR(没什么好说的)

  • 好吧,你需要说些什么来达到15个字符.;)+1 (17认同)
  • 我认为 ANTLR 在给出正确的错误消息方面确实存在问题。祝你好运,例如。在哪里放置 @inlude 规范!文档令人困惑,并且从未显示出首选的处理方式。树语法是浪费时间。ANTLR 网站甚至有一个关于此的巨大博客条目。 (2认同)
  • 嗯,看起来像 http://www.antlr.org/wiki/display/ANTLR3/Antlr+3+CSharp+Target 上次更新是在 3 年前,所有代码块都丢失了——等等,不,这就是发生的事情当 JavaScript 被禁用时。无论如何,C# 一直是 ANTLR 的二等目标。当我第一次使用它时,C# Runtime 源代码不可用:作者(与 ANTLR 的作者不同)在没有指定许可证 IIRC 的情况下发布了二进制文件,并从地球表面掉了下来。我使用 Reflector 来重构源代码。 (2认同)

pli*_*nth 6

对解析器生成器来说,黄金是可以的.

  • OP要求LL(k).黄金是LALR. (3认同)

Qwe*_*tie 5

块上有一个名为LLLPG的新解析器生成器,它支持 LL(k) 语法和零宽度断言。运行时库是可选的(一个基类就足够了)。文档现在已经相当详细了,我已经使用 LLLPG 来解析大部分 C# 方言,称为 Enhanced C#(实际上,它是 LLLPG 的主要输入语言)。但是,输入语法不是 EBNF(它是 C# + ANTLR 样式代码的混搭)。

完全披露:我写的。欢迎提问。

编辑: Google 对“C# 解析器生成器”的最高搜索结果是由一个名叫“Tomassetti”的人编写的,他声称我的解析器生成器“不能真正独立使用”——这就像说 PC“不能真正用作独立游戏设备”因为它可以同时做网页浏览和电子表格。确实,在安装 Visual Studio 扩展后,您必须单独转到 NuGet 并获取运行时库 (Loyc.Syntax),但我认为这不是他的意思,而且我认为他从未真正尝试过使用它。LLLPG 的设计是一个特性,而不是一个错误。我只能说,请尝试一下,让我知道您的想法。