学习gcc内部

学习gcc内部,c,gcc,compiler-construction,C,Gcc,Compiler Construction,我最近对编译器及其工作方式非常感兴趣。既然gcc有它的来源,我想这将是最好的学习材料 我意识到的第一件事是,如果我对简单的编译器设计原则没有基本的了解,那么学习gcc是毫无意义的。从那以后,我一直在认真阅读《龙书》,据我所见,这本书实际上是一本关于编译器实现的书 尽管如此,阅读这本书只会让我更加渴望了解gcc之类的编译器 此外,我发现说我对c/c++有一个中级理解是恰当的(也就是说,我不想在不了解c的情况下学习gcc)。我希望学习gcc也能帮助我提高这一点 我已经下载了我能找到的最新版本;然而,

我最近对编译器及其工作方式非常感兴趣。既然gcc有它的来源,我想这将是最好的学习材料

我意识到的第一件事是,如果我对简单的编译器设计原则没有基本的了解,那么学习gcc是毫无意义的。从那以后,我一直在认真阅读《龙书》,据我所见,这本书实际上是一本关于编译器实现的书

尽管如此,阅读这本书只会让我更加渴望了解gcc之类的编译器

此外,我发现说我对c/c++有一个中级理解是恰当的(也就是说,我不想在不了解c的情况下学习gcc)。我希望学习gcc也能帮助我提高这一点

我已经下载了我能找到的最新版本;然而,在阅读源代码时,我迷路了

我要找的是关于如何进行的建议。是否有一个类似的项目,它不是那么庞大,我可以作为一个垫脚石gcc使用?gcc是否有一个特别的模块,建议先学习哪一个?是否有任何书籍涉及gcc的实现,而不是它的使用?也许我应该停止抱怨,继续阅读源代码直到它点击

如有任何反馈,我们将不胜感激


编辑:如果你认为我应该研究不同的编译器/解释器,我将非常感谢关于哪些编译器/解释器的建议

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

同样值得一提的是,Fabrice Bellard以其出色的表现赢得了模糊c代码竞赛。还有一个除臭版本,它适合一个


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

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

我认为在阅读gcc代码之前,最好先阅读《显微镜下的ruby》一书,并练习ruby核心开发。但是您应该需要ruby编程方面的知识。是关于ruby internels的


据我所知,关于gcc最好的书是《gcc权威指南》。虽然它有点旧,但我认为你应该读一下。

我也对编译器很感兴趣,我从Niklaus Wirth的书《算法+数据结构=程序》中学到了很多东西。最后的一章描述了Pascal-0语言,前面的章节展示了如何解析和编译一种非常简约的语言。Pascal-0、PL/0是两步编译器,它们生成p代码,这是最低限度虚拟机(与Java不同)的“机器代码”

,并在最后链接到PL/0编译器和其他有趣的信息

用于编写可读且结构良好的代码。这里是语言定义和许多其他有趣的链接


学习和使用Pascal的优点是,该语言非常结构化,而不是从汇编语言(如C)演变而来。它使编译更加容易。甚至不需要做几遍……

你应该先阅读龙之书,然后编写自己的编译器。这非常有帮助。我听说GCC是一个很难破解的东西。也许LLVM会是一个替代方案?1。您应该在专家级别2完全理解该语言。先为一种小型语言编写自己的编译器。GCC一团糟。还有更好的选择,我一直在研究龙书。不过,我也会考虑编写自己的编译器。我还想提到的是,我发现gcc有关于其内部的文档,除非您精通阅读和理解C,否则不要期望学习任何东西。gcc是成熟的代码(而且非常大)。里面有很多你可能不懂的“把戏”。另外:考虑到其规模,很难看到整体情况(多目标平台、交叉编译器、引导:都在那里…)。为了学习编译器理论,您应该选择一个较小的编译器IMHO作为研究对象。但是你可以试试……我同意,LLVM比gcc更适合学习/黑客。在研究生院,编译器课程将LLVM用于项目。免责声明:我有点偏见。我的编译器项目正在使用plan9中的LLVM::-)
8c
也很容易阅读。