【问题标题】:Learning Resources on Parsers, Interpreters, and Compilers [closed]解析器、解释器和编译器的学习资源 [关闭]
【发布时间】:2010-09-07 16:38:31
【问题描述】:
一段时间以来,我一直想尝试编写自己的语言(表面上是为了学习经验),因此需要在解析器、解释器和编译器的构建方面相对扎实。所以:
- 有人知道有关构建解析器、解释器和编译器的任何好的资源吗?
编辑:我不是在寻找编译器编译器/解析器编译器,例如 Lex、Yacc 和 Bison...
【问题讨论】:
标签:
compiler-construction
interpreter
parsing
compiler-theory
language-theory
【解决方案4】:
RE:lex、yacc、bison
您的意思是您不需要指向它们的指针,或者您对使用它们不感兴趣?我不建议手动编写词法分析器或解析器。
编辑:您可能对“编译器-编译器”可以完成的工作有一种夸大的感觉:编译的真正困难部分是在您构建 AST 之后开始的。 Aho、Louden 和 Appel 的书都很不错。
【讨论】:
-
@Chris Conway 因为研究这个主题的一个主要原因是为了了解它,所以我更倾向于从头开始构建这样的东西。我知道很多 compiler-compilers 等,我可能会研究它们是如何实现的,但除此之外,我想要帮助我更好地理解解析器、解释器、和编译器的工作以及如何实现它们。
【解决方案5】:
Steve Yegge (Rich Programmer Food) 的这篇非常有趣的博文不会告诉您关于如何 构建编译器的所有信息(尽管它确实包含了相当多的好东西洞察力),但它很好地解释了为什么你想了解编译器。
哎呀,那篇帖子差点让我开始学习编译器,而且我有一份全职工作,家里有一个 3 岁的孩子,平均每天有大约 -1.5 小时的空闲时间。
【解决方案6】:
我推荐Compiler Design in C,不幸的是你必须在二手书网站上找到它。这本书唯一真正的问题是它是在编译速度是一个重要因素时写回来的,所以编译器是用 C 编写的。这已经足够低级语言了,有时实现理论被埋在实现代码之下。
您提到了解释器和编译器。我实际上建议从解释器而不是编译器开始。开始使用口译员要容易得多,而且使用它们往往更有趣,因为您可以立即获得有关您的工作方式的反馈。
【解决方案7】:
我最近阅读了Programming Language Processors in Java,并会向您推荐它,因为它从基本概念开始,然后带您完成递归下降编译器的实现,包括代码生成以及对替代方法的大量讨论。不过,我还没有阅读此线程中的其他建议书,因此无法与这些书进行比较。如果您不了解 Java,请不要被 In Java 部分推迟,因为这些概念及其实现已经得到很好的解释,您无需详细了解 Java 即可了解要点。
【解决方案8】:
以防万一:
- 愿意玩
- 希望有机会更快地构建一些东西,然后更深入
- 可以在底层平台上使用 .NET
...那么我建议您检查 Microsoft 的 Dynamic Language Runtime,它在整个 Dynamic Silverlight SDK 中作为源代码提供。
http://www.codeplex.com/sdlsdk
它的一些优点是它提供了许多即用型功能,例如控制台、通用类型系统、通用抽象语法树等。该软件包包括三个实现:Python、Ruby 和 Javascript。
也许这是实现 DLR 之外的短语言的好机会,然后开始检查实际的 DLR 代码,然后开始自己构建基本的东西。
无论如何,祝你好运!
【解决方案11】:
这是一本老书,而且过时了,但我发现 Brinch Hansen on Pascal Compilers 是一本非常实用的关于创建语言和构建编译器元素的介绍。尽管有这个名字,但它并不特定于 Pascal。如果你能找到一份副本,那是非常值得的。