Compiler construction 关于解析器、解释器和编译器的学习资源

Compiler construction 关于解析器、解释器和编译器的学习资源,compiler-construction,interpreter,parsing,compiler-theory,language-theory,Compiler Construction,Interpreter,Parsing,Compiler Theory,Language Theory,一段时间以来,我一直想尝试编写自己的语言(表面上是为了学习经验),因此,我需要以解析器、解释器和编译器的构造为基础。因此: 有人知道关于构造解析器、解释器和编译器的好资源吗? 编辑:我不是在寻找诸如Lex、Yacc和Bison之类的编译器/解析器编译器……不太容易,但非常详尽:是关于这个主题的最好的书。Aho的《龙之书》是标准参考,但另一个不错的选择是Andrew Appel的(也有和多种口味)。它一步一步地引导您了解编译器/解释器的每个必要组件,并提供大量有用的源代码。RE:lex、yac

一段时间以来,我一直想尝试编写自己的语言(表面上是为了学习经验),因此,我需要以解析器、解释器和编译器的构造为基础。因此:

  • 有人知道关于构造解析器、解释器和编译器的好资源吗?

编辑:我不是在寻找诸如Lex、Yacc和Bison之类的编译器/解析器编译器……

不太容易,但非常详尽:

是关于这个主题的最好的书。

Aho的《龙之书》是标准参考,但另一个不错的选择是Andrew Appel的(也有和多种口味)。它一步一步地引导您了解编译器/解释器的每个必要组件,并提供大量有用的源代码。

RE:lex、yacc、bison

你是说你不需要指向它们的指针,还是说你对使用它们不感兴趣?我不建议手工编写lexer或解析器


编辑:您可能对“编译器”可以完成的任务有一种夸张的感觉:编译的真正困难部分是在您构建AST之后开始的。《阿霍》、《劳登》和《阿佩尔》这三本书都很好。

这篇由史蒂夫·耶格()撰写的极具娱乐性的博文不会告诉你关于如何构建编译器所需要知道的一切(尽管它确实包含了相当多的深刻见解),但它很好地解释了你为什么想要理解编译器

见鬼,那篇帖子几乎让我开始学习编译器,我有一份全职工作,一个3岁的孩子在家,平均每天大约有-1.5个小时的空闲时间。

我建议你在二手书网站上找到它。这本书唯一真正的问题是,它是在编译速度是一个重要因素的时候写的,因此编译器是用C语言编写的。这已经足够低级别语言了,有时实现理论会隐藏在实现代码之下

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

我最近读过,并向您推荐它,因为它从基本概念开始,然后引导您完成递归下降编译器的实现,包括代码生成,并对替代方法进行了大量讨论。不过,我还没有读过本帖中的其他推荐书,因此无法与这些书进行比较。如果您不懂Java,请不要对Java部分感到不快,因为概念及其实现已经解释得很清楚了,您不需要详细了解Java就可以理解要点。

以防万一:

  • 你愿意玩吗
  • 就像有机会更快地建造一些东西,然后再深入
  • 您可以在底层平台上使用.NET吗
…然后我建议您检查Microsoft的动态语言运行时,它作为源代码提供在整个动态Silverlight SDK中

它的一些优点在于它提供了许多随时可用的特性,如控制台、通用类型系统、通用抽象语法树等。该包包括三种实现:Python、Ruby和Javascript

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

无论如何,另一个语言怪胎祝你好运

麻省理工学院开放式课程(OCW)网站上有一门课程,其项目是构建编者……他们参考了《龙书》和《阿佩尔书》,但除此之外,还有课堂笔记和讲座。这门课很有趣


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

我发现——杰克·克伦肖的教程很容易理解。Jack从头开始为Pascal构建了一个编译器,每个步骤都有非常详细的解释。

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

我读过的关于编译器的最好的论文是1964年的 Val Schorre的“META II一种面向语法的编译器编写语言”。 ()

在10页的篇幅中,他向你展示了如何构建一个令人惊讶的简单但简单的 非常有效的编译器,提供 您可以使用编译器语法,并为您提供足够的 你可以在一个下午手工实现它的细节(有一个惊人的 当你意识到它是如何反复出现的概念性时刻),而仅仅是为了grins实现了一个 类似阿尔戈尔语的语言。这张纸完全是一种气体,真的应该如此 任何使用编译器技术的人都必须阅读

这里有一个链接,可以使用一个很棒的元计算教程, 基于论文。

我认为这本书比《龙之书》更适合初学者。强烈推荐。因为研究这个主题的一个主要原因是为了了解它,所以我更关注的是从头开始构建类似的东西。我知道有很多编译器等,我可能会研究它们是如何实现的,但除此之外,我需要的资源将帮助我更好地了解解析器、解释器和编译器如何工作以及如何实现它们。