【问题标题】:Parser-generator that outputs C# given a BNF grammar? [closed]在给定 BNF 语法的情况下输出 C# 的解析器生成器? [关闭]
【发布时间】:2008-09-30 15:32:02
【问题描述】:

如果我给它一个 BNF 语法(例如http://savage.net.au/SQL/sql-2003-2.bnf),我正在寻找一个能够构建解析器(在 C# 中)的工具

这样的生成器存在吗?

【问题讨论】:

    标签: c# parsing bnf


    【解决方案1】:

    通常 BNF 语法太模棱两可。 ANTLR 可能对您正在寻找的东西有好处。

    【讨论】:

    • 看来你是对的。我刚刚在网上某处读到:“If-then-else 不能在上下文无关、优先级/谓词无关的语法中明确指定,例如 EBNF”
    【解决方案2】:

    Visual Studio SDK 实际上带有词法分析器和解析器生成工具。这些被称为 MPPG 和 MPEx 并且是 Managed Babel 包的一部分。虽然将它们与 SDK 捆绑在一起的目的是为 Visual Studio 开发语言扩展,但它们完全可用于创建通用 AST 发射解析器。

    MPLex 和 MPPG 基于 GPLEXGPPG(昆士兰科技大学的项目),并以与 Lex 和 Yacc 类似的方式使用。 SDK 还包含 MSBuild 操作,用于使解析器生成成为常规构建过程的一部分。

    这是一个展示 MPLex 和 MPPG 的截屏视频:
    http://msdn.microsoft.com/en-us/vstudio/cc837016.aspx

    【讨论】:

    • 链接好像坏了。
    • 似乎微软很久以前就停止了 Managed Babel。在这一点上,我可能会选择 FsLex 和 FsYacc (fsprojects.github.io/FsLexYacc)。它基于 F#,但可以编译为常规 .NET 程序集,如果您愿意,可以由 C# 项目使用。
    • 我建议您调查此中断并深入修改您的答案,说从今年到那年 VS SDK 包含这个,现在这个和那个正在发生。未来几年,人们会多次查看您的答案。
    【解决方案3】:

    您将不得不稍微调整 BNF,但 TinyPG 是一个很棒的工具。

    【讨论】:

      【解决方案4】:

      也看看 Irony:

      http://irony.codeplex.com/

      看起来很有希望

      【讨论】:

        【解决方案5】:

        IronMeta 是 Alex Warth 的 OMeta 的 C# 实现;它是一个 Packrat PEG(解析表达式语法;使用有偏见的选择),因此语法比使用类似 yacc 的 LALR 系统时更简洁。

        【讨论】:

          猜你喜欢
          • 2011-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-06
          • 2013-01-05
          相关资源
          最近更新 更多