我正在用 Java 编写一个编译器程序的解释器。因此,在检查源代码、语法和语义之后,我希望能够运行源代码,这是我的编译器的输入。我只是想知道我是否可以翻译一些标记,例如 out (它在屏幕上打印内容),我可以将其替换为 System.out.print 吗?然后再次输入源代码以在java中运行它?
我听说过使用 Java 编译器 API,这是一个好的计划吗?
提前非常感谢您!
最佳答案
您要求的是虚拟机实现技术,要运行一般的Java代码,您应该实现以下内容:
- 我想您已经完成了前几个步骤(设计/描述语言语义、构建 AST 并执行所需的代码验证)
- 你需要生成你的字节码,原始Java的工作方式完全相同,它生成源代码的另一种表示形式,从人类可读到机器可读。 在这里您可以看到 Java 字节码的样子 http://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/
- 您需要实现虚拟机(又名堆栈机)来读取字节代码并运行它以供执行。
如您所见,您的任务应该有 3 个独立的组件(项目): 1. 语言语法 2.编译器(字节码生成器) 3.虚拟机(字节码的解释器)
附注我有从头开始创建类似 Java 的小型编译器的经验(使用 ANTlr 定义语法、编译器的实现、虚拟机的实现),所以如果您需要特定的东西,我可能可以与您分享更多信息(甚至源代码)
关于java - 为编译器编写解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4933548/