繁体   English   中英

为编译器编程解释器

[英]Programming an Interpreter for a Compiler

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

我听说过使用Java Compiler API,这会是一个好计划吗?

提前非常感谢您!

您要问的是一种虚拟机实现技术,通常要运行Java代码,您应该实现以下目标:

  1. 我想您已经完成了前几个步骤(设计/描述语言语义,构造AST并执行所需的代码验证)
  2. 您需要生成字节代码,原始Java的工作方式完全相同,它生成源代码的另一种表示形式,从人类可读到机器可读。 在这里,您可以看到Java字节码的外观,例如http://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/
  3. 您需要实现一个虚拟的又名堆栈计算机,该计算机读取字节码并运行它以执行。

如您所见,您应该为任务分配3个独立的组件(项目):1.语言语法2.编译器(字节码生成器)3.虚拟机(字节码解释器)

PS我有从零开始创建小型Java类似编译器的经验(使用ANTlr定义语法,编译器的实现,虚拟机的实现),所以如果您需要一些特殊的东西,也许我可以与您共享更多信息(甚至是源代码)

您确实需要阅读一些书籍和/或参加有关编译器的课程-这不能通过SO的两段式答案来解决。

您可以创建一个交叉编译器,以读取您的语言并输出Java代码以完成相同的操作。 这可能是最简单的选择。

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

这与编写解释器不一样。 这是作业吗? 任务是说您必须编写解释器,还是可以使代码以任何可行的方式运行?

不幸的是,您没有提到您打算支持哪种脚本语言。 如果它是众所周知的语言之一,则只需使用以纯Java编写的现成解释器即可。 请参阅BSF和Java 5脚本(http://www.ibm.com/developerworks/java/library/j-javascripting1/)

这是你自己的语言

  1. 请三思:您真的需要吗?
  2. 如果您确定需要自己的语言,请考虑一下JavaCC

首先,非常感谢您的快速答复。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM