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

时间:2008-09-03 14:25:58

标签: compiler-construction interpreter parsing compiler-theory language-theory

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

  • 有没有人知道构建解析器,解释器和编译器的任何好资源?
编辑:我不是在寻找编译器编译器/解析器编译器,如Lex,Yacc和Bison ......

12 个答案:

答案 0 :(得分:12)

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

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

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

答案 1 :(得分:8)

Aho的“龙书”是 标准参考,但另一个不错的选择是Andrew Appel的Modern Compiler Implementation in Java(也有MLC种类)。它逐步引导您逐步完成编译器/解释器的每个必要组件,并提供许多有用的源代码。

答案 2 :(得分:8)

Steve Yegge撰写的这篇极具娱乐性的博客文章(Rich Programmer Food)不会告诉您关于如何构建编译器的所有信息(虽然它确实包含了相当数量)很好的见解),但它很好地解释为什么你想要理解编码器。

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

答案 3 :(得分:6)

不是很容易,但详尽无遗:the dragon book

答案 4 :(得分:4)

Compiler Construction: Principles and Practice是关于此主题的最佳书籍。

答案 5 :(得分:4)

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

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

答案 6 :(得分:4)

我找到了"Let's build a compiler" - Jack Crenshaw的教程,很容易理解和理解。 Jack从头开始为Pascal构建编译器,并对每个步骤进行非常详细的解释。

答案 7 :(得分:3)

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

答案 8 :(得分:2)

我建议你遗憾地在二手书网站上找到Compiler Design in C。本书唯一真正的问题是,当编译速度是一个重要因素时,它被写回来,因此编译器是用C语言编写的。这就足够了一种低级语言,有时实现理论隐藏在实现代码之下。

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

答案 9 :(得分:2)

以防你:

  • 愿意玩
  • 喜欢更快地建造东西的机会,然后再深入了解
  • 在底层平台上使用.NET是否可以

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

http://www.codeplex.com/sdlsdk

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

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

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

答案 10 :(得分:1)

RE:lex,yacc,bison

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

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

答案 11 :(得分:0)

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