为了好玩和练习,我想构建一个非常简单的编程语言和编译器(使用Java)。我将描述我的设计理念,然后询问一些有关它的问题。非常感谢您的帮助:)
设计:
使用这种语言编写的程序将在我将创建的(当然简单的)虚拟机上运行。
编写和运行程序的步骤:
1 - 程序员将代码写入编译器(一种IDE)。 编译如下:
编译器扫描代码,并将每一行转换为操作码。例如,如果代码行是:print ("hello")
,编译器会将其转换为类似p"hello"
的内容 - 这将是
操作码。
扫描整个代码后,我们将有一个字节码文件,由生成的所有操作码组成。
这个字节码类型将由我为我的VM创建。这不是技术定义中的字节码,因为它的操作码不是每个字节一个字节。相反,每个操作码将是一个组合字母和数字的指令。 (就像在我的例子中:操作码p"hello"
告诉VM在屏幕上打印“Hello”。它是Bytecode,它是编译语言代码的结果,而代码是由VM执行的(正确吗?)。
2 - 运行程序(执行字节码)的步骤如下:
p"hello"
,并作出反应
执行:System.out.println("hello");
。我的问题
此VM程序是否被视为VM?
这个字节码是否被认为是字节码?(即使它不是以专业方式编写的,每个操作码都是一个字节)?
答案 0 :(得分:2)
对于这两个问题都是肯定的(关于stackoverflow的偏离主题):
此VM程序是否被视为VM?
是的,(process) virtual machine是解释像字节码
这样的低级表示的东西这个Bytecode是否被认为是Bytecode?
是的,byte-codes并不总是一个字节。
我强烈建议您阅读Queinnec的Lisp in small pieces