Java 为编译器编写解释器

Java 为编译器编写解释器,java,compiler-construction,interpreter,Java,Compiler Construction,Interpreter,我正在用Java为编译程序编写一个解释器。因此,在检查了源代码、语法和语义之后,我希望能够运行源代码,这是我的编译器的输入。我只是想知道我是否可以翻译一些标记,例如,out(它在屏幕上打印东西),我可以用System.out.print替换它吗?然后再次输入源代码以在java中运行它 我听说过使用Java编译器API,这是一个好计划吗 提前非常感谢 你真的需要阅读一些关于编译器的书籍和/或课程-这不能通过两段式的回答来解决。你可以创建一个交叉编译器,它读取你的语言并输出Java代码来做同样的事情

我正在用Java为编译程序编写一个解释器。因此,在检查了源代码、语法和语义之后,我希望能够运行源代码,这是我的编译器的输入。我只是想知道我是否可以翻译一些标记,例如,out(它在屏幕上打印东西),我可以用System.out.print替换它吗?然后再次输入源代码以在java中运行它

我听说过使用Java编译器API,这是一个好计划吗


提前非常感谢

你真的需要阅读一些关于编译器的书籍和/或课程-这不能通过两段式的回答来解决。

你可以创建一个交叉编译器,它读取你的语言并输出Java代码来做同样的事情。这可能是最简单的选择

Java编译器API可用于编译Java代码。您需要先将现有代码翻译成Java才能使用它


这与编写解释器不同。这是家庭作业吗?任务是说您必须编写解释器,还是可以让代码以任何方式运行?

您要求的是虚拟机实现技术,要运行Java代码,通常应实现以下内容:

  • 我猜您已经完成了前几个步骤(设计/描述语言语义,构造AST并执行所需的代码验证)
  • 您需要生成字节码,原始Java的工作方式完全相同,它生成源代码的另一种表示形式,从人类可读到机器可读。 在这里,您可以看到Java字节码的样子
  • 您需要实现读取字节码并运行以执行的虚拟堆栈机
  • 如您所见,您的任务应该有3个独立的组件(项目): 1.语言语法 2.编译器(字节码生成器) 3.虚拟机(字节码解释器)


    另外,我有从头开始创建类似Java的微型编译器的经验(用ANTlr定义语法、编译器的实现、虚拟机的实现),所以我可能可以与您分享更多信息(甚至源代码)如果您需要特定的

    很遗憾,您没有提到您计划支持哪种脚本语言。如果它是一种著名的语言,只需使用纯java编写的现成解释器即可。请参阅BSF和Java5脚本(http://www.ibm.com/developerworks/java/library/j-javascripting1/)

    这是你自己的语言

  • 三思:你真的需要它吗
  • 如果您确定需要自己的语言,请考虑JavaCC

  • 首先,非常感谢您的快速回复

    作为编译器项目的一部分,我们需要能够编译和运行用我们自己指定的语言编写的程序。该语言与C语言非常相似。我对解释器的工作原理感到困惑,有没有更简单的方法来实现这一点?不生成字节码?我的想法是将每条语句翻译成Java等价语句,并让Java处理字节码生成


    我将研究所提到的主题。再次感谢您的建议。

    就个人而言,我不太确定您所说的“编译器程序的解释器”是什么意思——理论上,解释器可以运行任何程序,除非您的意思是将其知识限制在该程序中出现的特定标记子集。在任何情况下,如果您详细解释了您期望它如何工作和/或您希望通过它实现什么(特别是为什么
    javac
    后跟
    java
    不够好),希望它能让您更容易准确地理解您想要的东西。一些详细的示例会很好,因为解释器和编译器通常相互排斥。结构化和详细的示例总是很好的…或者..*学习编译器课程*,我打赌这就是OP的意义所在doing@bestsss-那他一定是逃课了:-)