【发布时间】:2009-10-15 20:05:02
【问题描述】:
我想了解如何在 .NET 中构造解析器来处理源文件。例如,也许我可以从学习如何解析 SQL、HTML 或 CSS 开始,然后对结果进行操作,以便能够对它们进行格式化以提高可读性或类似的东西。
我在哪里可以学习如何做到这一点?有没有具体的书可以参考?我需要了解词法分析器/解析器吗?
特别是针对 .NET 平台,因为我对 C# 很熟悉。
【问题讨论】:
我想了解如何在 .NET 中构造解析器来处理源文件。例如,也许我可以从学习如何解析 SQL、HTML 或 CSS 开始,然后对结果进行操作,以便能够对它们进行格式化以提高可读性或类似的东西。
我在哪里可以学习如何做到这一点?有没有具体的书可以参考?我需要了解词法分析器/解析器吗?
特别是针对 .NET 平台,因为我对 C# 很熟悉。
【问题讨论】:
我个人发现这篇文章Grammars and Parsing with C# 2.0 是一篇关于编写词法分析器/解析器的精彩介绍,其中包含专门与 C# 相关的示例。
我不久前写了a brief blog post关于它,做它赞美。好消息是它非常适合完全初学者来解析理论(它为理论和实现提供了背景),并且逐步进行。当然,如果你想继续学习该领域更高级的想法,你将需要各种其他资源,但我认为这是一个很好的基础。
【讨论】:
如果您确实想学习如何编写解析器,这可能不是您的答案,但如果您只想解析和处理解析结果,您应该明确地查看Irony.net。它是一个有助于实现语言(使用 .NET)的工具包。
【讨论】:
ANTLR :)
这是学习语法和解析器的好方法
【讨论】:
自 2.0 以来,C# 已经走过了漫长的道路。最近添加的表达式树和动态类型使得实现编译器变得更加有趣。
Here is a tutorial 了解如何在 CodeProject.com 上的 C# 4.0 中创建解释器。
【讨论】:
即使很难,这可能看起来有点太高级了,看看 monadic parser combinator。 LukeH 的 WebLog 上有一篇很棒的博文:
http://blogs.msdn.com/lukeh/archive/2007/08/19/monadic-parser-combinators-using-c-3-0.aspx
一旦你掌握了基础知识,它就可以非常清晰地定义解析器。
【讨论】:
我读过的关于解析习语的最好的书是《小语言》
如果您能够获得 System.Text.RegularExpressions 的 .NET 源代码,您还将看到如何构建解析器的真实世界实现。
Justin Rogers 在他的博客上有一些关于如何构建通用解析器的优秀文章:
最后,如果您想进入解析器和语法的新世界,您真的应该阅读“奥斯陆”以及如何使用语言 M 和 MGrammar。在解析生成的对象图并将其转换为其他可用形式时,它们将为您提供很大的灵活性。
Justin 的文章可能是使用构建在 .NET 之上的原始解析器启动和运行最简单和最简单的文章。
【讨论】: