我想了解如何在 .NET 中构造解析器来处理源文件。例如,也许我可以从学习如何解析 SQL、HTML 或 CSS 开始,然后对结果采取行动,以便能够将它们格式化以提高可读性或类似的东西。
我在哪里可以学习如何做到这一点?有没有具体的书可以参考?我需要了解词法分析器/解析器吗?
专门针对 .NET 平台,因为我对 C# 很熟悉。
我个人发现这篇文章Grammars and Parsing with C# 2.0是一篇关于编写词法分析器/解析器的精彩介绍,其中包含与 C# 相关的示例。
不久前我写了一篇关于它的简短博客文章,对它赞不绝口。好消息是它非常适合完全初学者来解析理论(它为理论和实现提供了背景),并且逐步进行。当然,如果你想继续学习该领域更高级的思想,你将需要各种其他资源,但我认为这是一个很好的基础。
如果您确实想学习如何编写解析器,这可能不是您的答案,但如果您只想解析和处理解析结果,您应该明确地查看Irony.net。它是一个有助于实现语言(使用 .NET)的工具包。
ANTLR :)
这是学习语法和解析器的好方法
自 2.0 以来,C# 已经走过了漫长的道路。最近添加的表达式树和动态类型使得实现编译器变得更加有趣。
这是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 之上的原始解析器启动和运行的最简单和最简单的方法。