我目前正在学习编译器课程。我不喜欢盲目地记住事实而没有任何地方适用它们的想法。我想通过亲自动手去做。
所以,我希望在完成Dragon书的同时,拥有3-4个编译器的完整代码,可能是针对具有不同语法规则的语言(python,c,c ++,java)。
如果完整的编译器问题太多,那么解析器(编写良好的LL,LR,LALR解析器)和这些语言的中间代码生成器的示例也可以。
互联网上有很多关于此的代码,但我想要一些被认为是高质量和标准的东西。我很感激您在这件事上可以引用我的任何资源。谢谢。
答案 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
较旧的编译程序包。
答案 3 :(得分:0)
那就是说,真正的编译器可能非常复杂;构建玩具编译器可能更容易理解。也就是说,TCC可能是该组中最好的起点,因为它足够小,易于理解。
答案 4 :(得分:0)
关于编译器的课程应该为您提供最终将成为完整编译器的部分。
例如,关于词法分析的部分可以导致一个名为Lexer的组件。如果您密切关注泛型和可重用性,可以将其转换为稍后可在编译器中使用的组件。
我强烈建议您采用在每个家庭作业项目中至少包含两个组件的方法:main
和库组件。在词法分析的示例中,main
组件将处理输入和测试。库组件将是词法分析器。在您毕业并在现实世界中开发大量应用程序后,这项技术将有很大帮助。
答案 5 :(得分:0)
我肯定会关注The LLVM Compiler Infrastructure。它本身不是编译器,而是编写编译器,解释器和虚拟机的核心工具。 Clang是一个基于这个框架构建的C / C ++编译器。
请注意,直接实现编译器理论会产生一个非常天真的编译器。大多数编译器通过对解析技术,优化和代码生成的多年高级研究扩展了该理论。
如果可以,请查看较小的项目,仅限于单一架构(即某些RISC计算机)和单一语言。一旦您完成了这一步,请查看更大的编译器套件,它们在前端支持多种语言,在后端支持多种体系结构。