1

我正在寻找一个小型编译器供个人/朋友使用。只是一些基本的输入输出控制台功能。以及所有其他的东西,比如字符串、整数、浮点数、字符、布尔值等等。但我想在java中做到这一点。我知道你要说什么,我应该使用一些实用且快速的东西,比如 C。但我也想要一点 OOP。现在,你一定在想,C++。我有一个问题。它完成的程序是.exe 文件。现在我知道您不需要安装任何东西来运行 .exe,并且要运行 .jar(我想要的文件),您需要安装 JVM。但是我有一些朋友在使用 Apple 电脑,而我没有 Apple,所以我无法为这些人提供另一个用 Obj-c 编写的版本。您可以在 Apple 上获得 JVM,如果需要,甚至可以在 linux 上获得,这将是一个跨平台。我知道它会慢一些,但它只是一种小语言,与第一个计算器等需要几分钟的东西相比,差异是如此之小。除非帮助是“获得生活”或“学习 C”之类的帮助,否则任何和所有帮助都将得到重视。我最擅长Java,并且喜欢跨平台,所以如果你建议任何不是Java的东西,我会很生气。谢谢!

编辑:没有多少人能看到我要问的问题,所以又来了。我想知道如何在java中制作A编译器。而已。

4

4 回答 4

10

看看这些教程/链接:

如果你想创建一个编译器来编译你自己的语言,那么你必须做更多的工作,然后创建一个编译器。您需要语言语法、堆、堆栈、助记符、操作码、调试器等,最后是编译器

但是,如果您想为 Java 语言创建自己的自定义编译器,请参阅:

应该这样做。

您可能会查看字节码工程库 ( BCEL ) 以及 Findbugs(它必须阅读/理解类文件)来获得一些灵感。

编辑:

这是另一个类似的问题,有一些很好的答案:Learning to write a compiler

于 2012-08-16T15:36:13.803 回答
2

这是一本让你入门的好书,对初学者来说真的很好。它从易于理解的理论开始,向您展示如何编写微型编译器以及如何逐步改进它。

使用 Java、JavaCC 和 Yacc 构建编译器

这是另一个,它包含很长的代码清单(你可能喜欢也可能不喜欢),很容易理解。

编写编译器和解释器:一种软件工程方法

还有其他 Java 编译器书籍和大量非 Java 编译器书籍(我个人拥有其中的一些)。但是如果你真的想坚持Java,我推荐你上面两个。

于 2012-08-16T15:46:32.027 回答
2

这里有一些我发现的要阅读的资源

在这里你可以找到 javac(java 编译器)的源代码,这真的应该是一个巨大的知识财富。

龙书,阅读编译器

于 2012-08-16T15:36:35.660 回答
-2

http://code.google.com/p/javamicko/

它尚未完成,但我希望你能以此为基础。这几乎是您想要的,Java 中的 C 编译器。

编辑:您将需要以下 - 一个扫描仪 - 为此使用 jFlex

解析器 - 为此使用 Bison

语言语法 - 你将在这里使用 C 语法,我认为它是在项目中上传的

“中间代码”可能是 .txt 文件中的一些 ASM 转储。稍后您可以使用该 ASM txt 文件为您的目标机器生成机器代码(本质上断开“编译”与“组装”的连接);将这两者分开还将为您留出空间在中间代码上运行优化器,以便在将其转换为十六进制字节(操作码)之前进一步优化它。

虽然现在查看代码......但我发现所提交的内容比我最初的要少得多。它是微型 C 编译器的一个端口,来自 C 而不是完整的。这是我的学校项目之一,所以值得一试……

于 2012-08-16T15:41:41.010 回答