首选语言:C/ c++、Java、Ruby。

我正在寻找一些关于如何编写自己的编译器的有用书籍/教程,只是为了教育目的。我最熟悉C/ c++、Java和Ruby,所以我更喜欢包含这三者之一的资源,但任何好的资源都是可以接受的。


当前回答

Python附带了一个用Python编写的Python编译器。您可以看到源代码,它包括从解析、抽象语法树、发出代码等所有阶段。 破解它。

其他回答

如果您愿意使用LLVM,请查看这个:http://llvm.org/docs/tutorial/。它教你如何使用LLVM的框架从头编写编译器,并且不假设你有任何关于这个主题的知识。

本教程建议您编写自己的解析器和lexer等,但我建议您了解bison和flex后再进行研究。它们让生活变得轻松多了。

这里有很多很好的答案,所以我想在列表中再添加一个:

十多年前,我有一本叫做Project Oberon的书,里面有一些关于编译器的非常好的文字。这本书的真正突出之处在于,它的来源和解释都是非常实用和易读的。全文(2005年版)已以pdf格式提供,因此您可以立即下载。编译器将在第12章讨论:

http://www.ethoberon.ethz.ch/WirthPubl/ProjectOberon.pdf

尼克劳斯·沃斯,于尔格·古特克内西

(这本书的内容不像他关于编译器的书那么广泛)

我读过几本关于编译器的书,我可以第二龙书,花时间在这本书上是非常值得的。

我认为这是一个相当模糊的问题;只是因为这个话题涉及的深度。然而,编译器可以被分解成两个独立的部分;上半身和下半身。上半部分通常采用源语言并将其转换为中间表示,下半部分负责特定于平台的代码生成。

尽管如此,解决这个问题的一个简单方法(至少是我们在编译器类中使用的方法)是在上面描述的两部分中构建编译器。具体来说,通过构建上半部分,您将对整个过程有一个很好的了解。

Just doing the top half lets you get the experience of writing the lexical analyzer and the parser and go to generating some "code" (that intermediate representation I mentioned). So it will take your source program and convert it to another representation and do some optimization (if you want), which is the heart of a compiler. The bottom half will then take that intermediate representation and generate the bytes needed to run the program on a specific architecture. For example, the the bottom half will take your intermediate representation and generate a PE executable.

关于这个主题的一些书,我发现特别有用的是编译器原理和技术(或者龙书,因为封面上有可爱的龙)。它有一些很棒的理论,而且肯定以一种非常容易理解的方式涵盖了上下文无关语法。此外,为了构建词法分析器和解析器,您可能会使用*nix工具lex和yacc。而且很无趣的是,这本名为《莱科斯和雅克》的书继承了《龙之书》这部分的内容。

Donald Knuth的《计算机编程的艺术》最初是作为编译器编写的教程而写的,这让我很惊讶。

当然,Knuth博士对主题深入研究的倾向导致编译器写作教程被扩展到大约9卷,其中只有3卷真正出版了。这是一个关于编程主题的相当完整的阐述,涵盖了关于编写编译器需要了解的所有细节。

如果您不仅仅是在寻找书籍,而且还对有关于该主题的文章的网站感兴趣,我已经在博客中讨论了创建编程语言的各个方面。大部分文章都可以在我博客的“语言设计”类别中找到。

特别是,我介绍了手动生成Intel机器代码、自动生成机器码或字节码、创建字节码解释器、编写面向对象的运行时、创建简单的加载器以及编写简单的标记/清除垃圾收集器。所有这些都是非常实用和务实的方式,而不是用大量的理论让你感到无聊。

将感激反馈这些。