【问题标题】:Parser How To in .NET解析器如何在 .NET 中使用
【发布时间】:2009-10-15 20:05:02
【问题描述】:

我想了解如何在 .NET 中构造解析器来处理源文件。例如,也许我可以从学习如何解析 SQL、HTML 或 CSS 开始,然后对结果进行操作,以便能够对它们进行格式化以提高可读性或类似的东西。

我在哪里可以学习如何做到这一点?有没有具体的书可以参考?我需要了解词法分析器/解析器吗?

特别是针对 .NET 平台,因为我对 C# 很熟悉。

【问题讨论】:

    标签: c# .net parsing lexer


    【解决方案1】:

    我个人发现这篇文章Grammars and Parsing with C# 2.0 是一篇关于编写词法分析器/解析器的精彩介绍,其中包含专门与 C# 相关的示例。

    我不久前写了a brief blog post关于它,做它赞美。好消息是它非常适合完全初学者来解析理论(它为理论和实现提供了背景),并且逐步进行。当然,如果你想继续学习该领域更高级的想法,你将需要各种其他资源,但我认为这是一个很好的基础。

    【讨论】:

    • +1。那个看起来不错这绝对是一个比直接研究一些非常复杂的代码更好的开始。
    • 这很棒。一个很好的介绍,很好的例子,并通过一些 C# 将它们联系在一起!
    • 链接已失效。文件还有人吗?
    【解决方案2】:

    如果您确实想学习如何编写解析器,这可能不是您的答案,但如果您只想解析和处理解析结果,您应该明确地查看Irony.net。它是一个有助于实现语言(使用 .NET)的工具包。

    【讨论】:

      【解决方案3】:

      ANTLR :)

      这是学习语法和解析器的好方法

      【讨论】:

      • ANTLR 的“缺点”(仅在这种情况下)是它会为您生成解析器,使用多种目标语言之一。很酷,这通常是目标,但在这种情况下,SevenCentral 将错过从头开始编写 [用于简单语法] 的教育。
      • 一个方便的工具,用于开发复杂的解析器(它甚至可以发出 C# 代码),但如果你想了解背景和基础知识,这可能不是最好的方法。
      • 我认为这是一个很好的开始方式,您可以了解解析器方面的可能性,然后可以更深入地挖掘并构建自己的,也许是一个简单的递归体面的解析器。
      【解决方案4】:

      自 2.0 以来,C# 已经走过了漫长的道路。最近添加的表达式树和动态类型使得实现编译器变得更加有趣。

      Here is a tutorial 了解如何在 CodeProject.com 上的 C# 4.0 中创建解释器。

      【讨论】:

        【解决方案5】:

        即使很难,这可能看起来有点太高级了,看看 monadic parser combinator。 LukeH 的 WebLog 上有一篇很棒的博文:

        http://blogs.msdn.com/lukeh/archive/2007/08/19/monadic-parser-combinators-using-c-3-0.aspx

        一旦你掌握了基础知识,它就可以非常清晰地定义解析器。

        【讨论】:

          【解决方案6】:

          我读过的关于解析习语的最好的书是《小语言》

          Little Languages on Amazon

          如果您能够获得 System.Text.RegularExpressions 的 .NET 源代码,您还将看到如何构建解析器的真实世界实现。

          Justin Rogers 在他的博客上有一些关于如何构建通用解析器的优秀文章:

          Justin's Blog

          最后,如果您想进入解析器和语法的新世界,您真的应该阅读“奥斯陆”以及如何使用语言 M 和 MGrammar。在解析生成的对象图并将其转换为其他可用形式时,它们将为您提供很大的灵活性。

          Justin 的文章可能是使用构建在 .NET 之上的原始解析器启动和运行最简单和最简单的文章。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-06-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-17
            • 2013-01-31
            • 2016-10-30
            相关资源
            最近更新 更多