编译器组件的良好源代码

时间:2011-01-27 16:11:28

标签: java c++ python parsing compiler-construction

我目前正在学习编译器课程。我不喜欢盲目地记住事实而没有任何地方适用它们的想法。我想通过亲自动手去做。

所以,我希望在完成Dragon书的同时,拥有3-4个编译器的完整代码,可能是针对具有不同语法规则的语言(python,c,c ++,java)。

如果完整的编译器问题太多,那么解析器(编写良好的LL,LR,LALR解析器)和这些语言的中间代码生成器的示例也可以。

互联网上有很多关于此的代码,但我想要一些被认为是高质量和标准的东西。我很感激您在这件事上可以引用我的任何资源。谢谢。

6 个答案:

答案 0 :(得分:2)

你可以从lua.org获取Lua编译器的代码,他们分发完整的源码,你也可以获得GCC的源代码,这是C和C ++编译。

答案 1 :(得分:2)

有许多简单易懂的编译器:

<强>更新

可能是最令人印象深刻的一个:   - http://community.schemewiki.org/?90min-scheme2c

答案 2 :(得分:1)

Python解析器文档。源代码是Python发行版的一部分。安装Python,你将拥有该模块的源代码。

http://docs.python.org/library/parser.html#module-parser

较旧的编译程序包。

http://docs.python.org/library/compiler.html

答案 3 :(得分:0)

  • C / C ++:GCC(旧的和有问题的代码库,但非常受欢迎),或clang(更新,模块化,接近生产质量,Apple等支持)。还有TCC - Tiny C编译器,它可能对学习很有帮助。
  • Python:PyPystackless python或原始cpython是良好的实现
  • Java:如果您只关心字节码编译器,请查看例如Jikes。如果你想要JIT以及诸如此类的东西,openjdk适合你。

那就是说,真正的编译器可能非常复杂;构建玩具编译器可能更容易理解。也就是说,TCC可能是该组中最好的起点,因为它足够小,易于理解。

答案 4 :(得分:0)

关于编译器的课程应该为您提供最终将成为完整编译器的部分。

例如,关于词法分析的部分可以导致一个名为Lexer的组件。如果您密切关注泛型和可重用性,可以将其转换为稍后可在编译器中使用的组件。

我强烈建议您采用在每个家庭作业项目中至少包含两个组件的方法:main和库组件。在词法分析的示例中,main组件将处理输入和测试。库组件将是词法分析器。在您毕业并在现实世界中开发大量应用程序后,这项技术将有很大帮助。

答案 5 :(得分:0)

我肯定会关注The LLVM Compiler Infrastructure。它本身不是编译器,而是编写编译器,解释器和虚拟机的核心工具。 Clang是一个基于这个框架构建的C / C ++编译器。

请注意,直接实现编译器理论会产生一个非常天真的编译器。大多数编译器通过对解析技术,优化和代码生成的多年高级研究扩展了该理论。

如果可以,请查看较小的项目,仅限于单一架构(即某些RISC计算机)和单一语言。一旦您完成了这一步,请查看更大的编译器套件,它们在前端支持多种语言,在后端支持多种体系结构。