【问题标题】:What is a good C# compiler-compiler/parser generator? [closed]什么是好的 C# 编译器/解析器生成器? [关闭]
【发布时间】:2009-07-28 14:42:20
【问题描述】:

我正在寻找一个解析器生成器,它为 LL(k) 语言提供 EBNF,它将为我提供 C# 解析器并生成 EBNF 中定义的类型的类。

【问题讨论】:

    标签: c# parser-generator


    【解决方案1】:

    ANTLR(没什么好说的)

    【讨论】:

    • 你需要说点什么才能达到 15 个字符。 ;) +1
    • 我认为 ANTLR 在提供正确的错误消息方面存在实际问题。祝你好运,例如。在哪里放置@inlude 规范!文档令人眼花缭乱,而且从来没有显示出做事的首选方式。树语法是浪费时间.. ANTLR 网站甚至有一个巨大的博客条目。
    • 嗯,看起来antlr.org/wiki/display/ANTLR3/Antlr+3+CSharp+Target 上次更新是在 3 年前,并且所有代码块都丢失了——等等,不,这正是禁用 JavaScript 时发生的情况。不管怎样,C#一直是二流的ANTLR目标。当我第一次使用它时,C# Runtime 源代码不可用:作者(与 ANTLR 的作者不同)发布了没有指定许可证 IIRC 的二进制文件,并从地球上掉了下来。我使用 Reflector 重构了源代码。
    【解决方案2】:

    Gold 就解析器生成器而言是可以的。

    【讨论】:

    • OP 要求 LL(k)。黄金是 LALR。
    • 如果我错了,请纠正我:LALR 语法没有 LL 语法子集吗?
    • @Saysmaster:不。维基百科说:“LALR(k) 解析器无法与 LL(k) 解析器相比——对于任何大于 0 的 j 和 k,存在 LALR(j) 语法不是 LL(k) 文法,反之亦然。事实上,对于任何 k >= 0,给定的 LL(1) 文法是否为 LALR(k) 是不可判定的。"
    • @Qwertie 感谢您提供的信息
    • 会很好,虽然有一个黄金引擎,它可以将完整的解析器代码生成到 1 个文件中,让我们免于依赖。 (例如对于 c#)
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      您可能想查看MinosseCC,这是JavaCC 到C# 的端口。另一种可能是Spart

      【讨论】:

      • MinosseCC 已重命名为 CSharpCC。当前版本在 Google 代码空间,它是 JavaCC 3.2 的端口,而开发版本(JavaCC 5.0 的端口)正在 GitHub 上开发(github.com/deveel/csharpcc
      • Spart 很糟糕;您无法从表达式中获取 AST。相反,您必须订阅 Act 事件,该事件仅将匹配的文本作为字符串返回。这使它几乎毫无用处。它应该是 Spirit 的一个端口(用于 C++),但在实践中,由于它不支持 Spirit 的这个特性,所以它是无用的。 (即使是简单的例子,文档也不正确)
      【解决方案5】:

      http://irony.codeplex.com/ 中寻找讽刺

      优点:很简单 缺点: - 缺乏文件 - 相当慢

      【讨论】:

        【解决方案6】:

        Grammatica 支持 LL(k)。 http://grammatica.percederberg.net/

        【讨论】:

          【解决方案7】:

          Coco/R(来自 SSW -“约翰内斯·开普勒”林茨大学)

          【讨论】:

            猜你喜欢
            • 2011-04-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-08
            • 1970-01-01
            相关资源
            最近更新 更多