我正在用Java编写一个编译器程序的解释器。因此,在检查源代码,语法和语义之后,我希望能够运行源代码,这是我的编译器的输入。我只是想知道我是否可以翻译一些令牌,例如,out(它在屏幕上打印东西),我可以用System.out.print替换它吗?然后再次提供源代码以在java中运行它?
我听说过使用Java Compiler API,这是一个好计划吗?
非常感谢你!
答案 0 :(得分:3)
您要求的是虚拟机实现技术,为了运行您的Java代码,您应该实现以下内容:
因此,您可以看到您的任务应该有3个独立的组件(项目): 1.语言语法 2.编译器(字节码生成器) 3.虚拟机(字节码解释器)
P.S。我有从头开始创建小型Java类似编译器的经验(使用ANTlr定义语法,编译器的实现,虚拟机的实现),所以如果你需要特定的东西,我可能会与你分享更多的信息(甚至是源代码)
答案 1 :(得分:2)
你真的需要阅读一些书籍和/或参加编程器课程 - 这不能通过关于SO的两段答案来解决。
答案 2 :(得分:1)
您可以创建一个交叉编译器来读取您的语言并输出Java代码来执行相同的操作。这可能是最简单的选择。
Java Compiler API可用于编译Java代码。您需要先将现有代码翻译为Java才能使用它。
这与编写解释器不同。这是家庭作业吗?该任务是否说您必须编写解释器,或者您可以以任何方式运行代码吗?
答案 3 :(得分:1)
很遗憾,您没有提到您计划支持哪种脚本语言。如果它是众所周知的语言之一,只需使用用纯java编写的现成解释器。请参阅BSF和Java 5脚本(http://www.ibm.com/developerworks/java/library/j-javascripting1/)
这是你自己的语言
答案 4 :(得分:0)
首先,非常感谢您的快速回复。
作为我们编译器项目的一部分,我们需要能够编译和运行用我们自己的指定语言编写的程序。语言与C非常相似。我对解释器的工作原理感到困惑,有没有更简单的方法来实现它?没有生成字节码?我的想法是将每个语句翻译成Java等价语句,让Java处理字节码生成。
我会调查上面提到的主题。再次,非常感谢您的建议。