Java 编译器组件的良好源代码

Java 编译器组件的良好源代码,java,c++,python,parsing,compiler-construction,Java,C++,Python,Parsing,Compiler Construction,我目前正在修一门关于编译器的课程。我不喜欢盲目地记忆事实,而没有任何地方去应用它们。我想通过亲身实践来学习 P> >,我希望在完成龙书时,可以使用3-4编译器的完整代码,可能适用于具有不同语法规则的语言(Python,C,C++,java)。 如果完整的编译器过于复杂,那么解析器示例(编写良好的LL、LR、LALR解析器)和这些语言的中间代码生成器也可以 互联网上有很多关于这方面的代码,但是我想要一些被认为是高质量和标准的东西。如果您能就此事向我提供任何资源,我将不胜感激。谢谢 > P>你可以

我目前正在修一门关于编译器的课程。我不喜欢盲目地记忆事实,而没有任何地方去应用它们。我想通过亲身实践来学习

<> P> >,我希望在完成龙书时,可以使用3-4编译器的完整代码,可能适用于具有不同语法规则的语言(Python,C,C++,java)。 如果完整的编译器过于复杂,那么解析器示例(编写良好的LL、LR、LALR解析器)和这些语言的中间代码生成器也可以


互联网上有很多关于这方面的代码,但是我想要一些被认为是高质量和标准的东西。如果您能就此事向我提供任何资源,我将不胜感激。谢谢

> P>你可以从Lua.Org抓取Lua编译器的代码,它们分发完整的源代码,也可以得到GCC的源代码,这是C和C++编译的。

< p>你可以从Lu.Org抓取Lua编译器的代码,它们分发完整的源代码,也可以得到GCC的源代码,这是C和C++编译的。

< PythPysServer文档。源代码是Python发行版的一部分。安装Python,您将获得模块的源代码

旧的编译器包


Python解析器文档。源代码是Python发行版的一部分。安装Python,您将获得模块的源代码

旧的编译器包

  • C/C++:(旧而僵硬的代码库,但非常流行),或者(更新的、模块化的、接近生产质量的,由苹果等公司支持)。还有一个很小的C编译器,它可能对学习有好处
  • Python:,或原始版本是很好的实现
  • Java:如果您只关心字节码编译器,请查看例如。如果你也想要JIT之类的东西,这是给你的
也就是说,真正的编译器可能相当复杂;构建玩具编译器可能更容易理解。这就是说,TCC可能是这个群体中最好的起点,因为它足够小,很容易理解。

  • C/C++:(旧而僵硬的代码库,但非常流行),或者(更新的、模块化的、接近生产质量的,由苹果等公司支持)。还有一个很小的C编译器,它可能对学习有好处
  • Python:,或原始版本是很好的实现
  • Java:如果您只关心字节码编译器,请查看例如。如果你也想要JIT之类的东西,这是给你的

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

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

  • 还有一些工具,虽然不是完整的编译器,但仍然有用:

  • (一个完整的C解析器和代码分析工具)
  • (完全C++分析器)
更新:

可能是最令人印象深刻的一个:
-

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

  • 还有一些工具,虽然不是完整的编译器,但仍然有用:

  • (一个完整的C解析器和代码分析工具)
  • (完全C++分析器)
更新:

可能是最令人印象深刻的一个:
-

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

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


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

你的编译器课程应该为你提供最终将成为一个成熟编译器的部分

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


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

我一定会调查的。它本身不是编译器,而是编写编译器、解释器和虚拟机的核心工具。Clang是基于此框架构建的C/C++编译器

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


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

我肯定会研究。它本身不是编译器,而是编写编译器、解释器和虚拟机的核心工具。Clang是基于此框架构建的C/C++编译器

请注意,实现编译器理论是直接的