关于构建非常基本的编译器的问题

时间:2014-03-03 19:09:26

标签: compiler-construction programming-languages bytecode

为了好玩和练习,我想构建一个非常简单的编程语言和编译器(使用Java)。我将描述我的设计理念,然后询问一些有关它的问题。非常感谢您的帮助:)

设计:

使用这种语言编写的程序将在我将创建的(当然简单的)虚拟机上运行。

编写和运行程序的步骤:

1 - 程序员将代码写入编译器(一种IDE)。     编译如下:

  • 编译器扫描代码,并将每一行转换为操作码。例如,如果代码行是:print ("hello"),编译器会将其转换为类似p"hello"的内容 - 这将是 操作码。

  • 扫描整个代码后,我们将有一个字节码文件,由生成的所有操作码组成。

    这个字节码类型将由我为我的VM创建。这不是技术定义中的字节码,因为它的操作码不是每个字节一个字节。相反,每个操作码将是一个组合字母和数字的指令。 (就像在我的例子中:操作码p"hello"告诉VM在屏幕上打印“Hello”。它是Bytecode,它是编译语言代码的结果,而代码是由VM执行的(正确吗?)。

2 - 运行程序(执行字节码)的步骤如下:

  • 程序在虚拟机程序内运行。这个计划 将扫描加载到其中的字节码,并将每个操作码转换为某些Java 操作(因为VM程序将用Java编写)。对于 例如,VM将读取操作码p"hello",并作出反应 执行:System.out.println("hello");

我的问题

  • 此VM程序是否被视为VM?

  • 这个字节码是否被认为是字节码?(即使它不是以专业方式编写的,每个操作码都是一个字节)?

1 个答案:

答案 0 :(得分:2)

对于这两个问题都是肯定的(关于stackoverflow的偏离主题):

  

此VM程序是否被视为VM?

是的,(process) virtual machine是解释像字节码

这样的低级表示的东西
  

这个Bytecode是否被认为是Bytecode?

是的,byte-codes并不总是一个字节。

我强烈建议您阅读Queinnec的Lisp in small pieces