在解析器,解释器和编译器上学习资源

在解析器,解释器和编译器上学习资源

Learning Resources on Parsers, Interpreters, and Compilers

我一直想用自己的语言编写一段时间(表面上是为了学习经验),因此需要在构建解析器,解释器和编译器时相对基础。 所以:

  • 有谁知道构建解析器,解释器和编译器的任何好资源?

编辑:我不是在寻找编译器编译器/解析器编译器,如Lex,Yacc和Bison ......


我在编译器上读到的最好的论文是1964年
"META II是一种面向语法的编译器编写语言",作者是Val Schorre。
(http://doi.acm.org/10.1145/800257.808896)

在10页中,他向您展示了如何构建一个令人惊讶的简单但是
非常有效的编译器编译器,提供
你使用编译器编译器语法并为你提供足够的
你可以在一个下午的时间内实现它的细节(令人惊讶的是
当你意识到它如何递归时的概念时刻),只是为了实现一个咧嘴笑
类似ALGOL的语言。这纸是一种完全的气体,真的应该
任何使用编译器技术的人都需要阅读。

这是一个关于元编译的精彩教程的链接,
基于论文。
http://www.bayfronttechnologies.com/mc_tutorial.html


这篇由Steve Yegge(Rich Programmer Food)撰写的极具娱乐性的博客文章不会告诉你关于如何构建编译器需要知道的一切(尽管它确实包含了相当多的好的洞察力),但是它做得很好解释你为什么要理解编码器。

哎呀,这篇文章几乎让我开始研究编译器,我有一份全职工作,一个3岁的家庭,平均每天约1.5小时。


Aho的"Dragon book"是标准参考,但另一个不错的选择是Andrew Appel的Java编译实现(也有ML和C版本)。它逐步引导您逐步完成编译器/解释器的每个必要组件,并提供许多有用的源代码。


不是很容易,但详尽无遗:龙书


我发现"让我们构建一个编译器" - Jack Crenshaw的教程,很容易理解和理解。 Jack从头开始为Pascal构建编译器,并对每个步骤进行非常详细的解释。


麻省理工学院开放式课件(OCW)网站有一个课程,其项目是建立一个编辑器...他们参考龙书和Appel的书,但此外,还有课堂笔记和讲座。该课程是6.035 - 计算机语言工程。

我发现课堂笔记非常适用于解释递归下降解析器。


编译器构造:原理和实践是关于该主题的最佳书籍。


我最近阅读了Java中的编程语言处理器,并将向您推荐它,因为它从基本概念开始,然后引导您完成递归下降编译器的实现,包括代码生成以及对替代方法的大量讨论。我没有读过这个帖子中的其他推荐书籍,所以无法与这些书籍进行比较。如果您不了解Java,请不要被In Java部分推迟,因为概念和它们的实现已经很好地解释了您在不需要详细了解Java的情况下获得要点。


以防你:

  • 愿意玩
  • 就像有机会更快地建立一些东西,然后更深入
  • 在底层平台上使用.NET是否可以

...然后我建议您查看Microsoft的动态语言运行时,它是整个Dynamic Silverlight SDK中的源代码。

http://www.codeplex.com/sdlsdk

它的一些好处是它提供了许多现成的功能,如控制台,通用类型系统,通用抽象语法树等。该软件包包括三个实现:Python,Ruby和Javascript。

也许这是一个很好的机会在DLR之外实现一种简短的语言,然后开始检查实际的DLR代码,然后开始自己构建基本的东西。

无论如何,从另一种语言怪胎中获得好运!


我推荐C编译器设计,不幸的是你必须在二手书网站上找到它。本书唯一真正的问题是,当编译速度是一个重要因素时,它被写回来,因此编译器是用C语言编写的。这就是一种低级语言,有时实现理论隐藏在实现代码之下。

你提到了口译员和编译器。我实际上建议从解释器而不是编译器开始。开始使用口译员要容易得多,因为你可以立即获得有关你如何做的反馈,因此他们往往更有乐趣。


RE:lex,yacc,bison

你的意思是你不需要指向它们或者你不想使用它们吗?我不建议手工编写词法分析器或解析器。

编辑:你可能夸大了"编译器 - 编译器"可以完成的事情:在构建AST之后,编译的真正困难部分就开始了。 Aho,Louden和Appel的书都很好。


这是一本旧书,相当陈旧,但我发现在Pascal编译器上的Brinch Hansen是一个非常实用的介绍,用于创建语言和构建编译器的元素。尽管有这个名字,但它并不是特定于Pascal的。如果你能找到一份副本,这是非常值得的。


推荐阅读