2012-01-12 48 views
6

我最近对编译器及其工作方式非常感兴趣。由于海湾合作委员会有它的来源,我认为这将是最好的研究材料。学习gcc内部

我意识到的第一件事是,如果我没有对简单的编译器设计原则有基本的理解,研究gcc是没有意义的。从那以后,我一直在努力阅读“龙书”,这本书是关于编译器实现的事实上的书。

无论如何,阅读这本书只会进一步加深我对编译器(如gcc)的了解。另外,我发现它适合于说我对c/C++有一个中等的理解(也就是说,我不想在不知道c的情况下研究gcc)。我希望研究gcc能帮助我改进这一点。

我已经下载了我能找到的最新版本;然而,当仔细阅读源代码时,我迷失了方向。

我在找的是关于如何继续的建议。有没有类似的项目,这不是很大,我可以用它作为gcc的垫脚石? gcc有一个特定的模块,哪一个会推荐先学习?是否有任何书籍进入gcc的实施,而不是它的用途?也许我应该停止抱怨,只是不断的阅读来源,直到它点击?

任何和所有的反馈将不胜感激。

编辑:如果你认为我应该学习不同的编译器/解释器,我将不胜感激关于哪些的建议。

+3

你应该阅读龙书然后编写你自己的编译器。它非常有帮助。 – 2012-01-12 23:17:18

+2

我听说GCC是一件痛苦的事情。也许LLVM会是另一种选择? – Blender 2012-01-12 23:19:36

+0

1.您应该在专家级完全理解语言2.首先编写您自己的小编程语言的编译器3. GCC是一团糟。有很多更好的选择 – Pubby 2012-01-12 23:20:19

回答

6

如果你想看一个非常小的编译器,我会推荐Fabrice Bellard的Tiny C Compiler

另外值得一提的是,Fabrice Bellard以他的Obfuscated Tiny C Compiler赢得了混淆的c代码比赛。还有一个去混淆版本,它适合于single c file

这些应该是很好,如果你想要一些小而易于学习的东西。

+0

plan9中的'8c'也很容易阅读。 – Dave 2012-01-13 01:36:13

5

我一定会看看clang/LLVM。我认为代码库非常可读。一个非常可行的选择是使用LLVM作为后端,并编写自己的简单词法分析器和解析器。

+2

我同意,LLVM比gcc学习/黑客要好得多。在研究生院,编译课程使用LLVM进行项目。 – TJD 2012-01-12 23:30:33

+1

声明:我有点偏袒。我的编译器项目使用LLVM:http://ellcc.org :-) – 2012-01-12 23:52:24

0

我认为在阅读gcc的代码之前阅读“在显微镜下进行ruby”一书并练习ruby核心开发是很好的。但你应该需要关于ruby编程的知识。这是关于ruby internels。

据我所知gcc上的最好的书是“gcc的权威指南”https://www.amazon.com/Definitive-Guide-GCC-Guides-Paperback/dp/1590595858。虽然有点老了,但我认为你应该阅读这个。

0

对编译器也充满激情,我从Niklaus Wirth的书Algorithms + Data Structures = Programs中学到了很多东西。最后一章描述了Pascal-0语言,前面的章节展示了如何解析和编译极简主义语言。 Pascal-0,PL/0是两步编译器,它们生成p代码,这是一个简约虚拟机的“机器代码”(与Java不同)。

This page describes a PL/0 virtual machine instruction set,最后还有链接到PL/0编译器和其他有趣的信息。

Niklaus Wirth has always had a knack用于编写可读性和结构良好的代码。这里是语言定义和许多其他有趣的链接。

学习和使用Pascal的优点是语言非常结构化,而不是从汇编语言(如C语言)发展而来。它使编译更容易。甚至没有必要做几次传球...