【发布时间】:2014-04-04 06:21:29
【问题描述】:
我想尝试创建我自己的非常基础的语言,它是非常基础的编译器。全部使用 Java。
目前,只需启用“程序员”即可将内容打印到屏幕上。
我对如何做到这一点有了一个想法,我想知道的是:这会被认为是一个真正的“编译器”、一个真正的“语言”和一个真正的“虚拟机”吗? (当然都是非常非常基础的)。
我的想法是创建一个用作“IDE”(编辑器和编译器)的程序,另一个用作“虚拟机”。
这意味着 IDE 不会将编写的代码编译成一些现有的机器代码,例如 Java Bytecode,但实际上会编译成我自己编写的某种编译代码。
这个编译后的代码只能被我的“虚拟机”程序理解,并且只能在这个程序中运行。 “虚拟机”程序将使用高级 Java 操作来理解和执行编译后的代码。
“虚拟机”程序将是一个 Java 程序,在 JVM 上运行。
我的问题是:概念上,这是否被视为虚拟机和“机器代码”? 如果不是,即使编译后的字节码只能在特定程序中运行,它是否仍被视为“编程语言”?
【问题讨论】:
-
也许你想看看github.com/NiklasRosenstein/beak-lang。代码记录了一点(虽然不是很好,但也不错)
-
如果你打算做这样的事情,看看Xtext!使用它肯定比从头开始编写所有内容更容易 + 您还可以获得适用于您的新语言的 IDE。
-
在 JVM 之上实现另一个虚拟机有什么意义?只需直接生成 JVM 字节码,这是一件非常简单直接的事情。看看 ASM 库。
-
而且,是的,根据定义,从一种语言到另一种语言的任何形式的翻译都是汇编。任何具有明确语义的足够复杂的语言(甚至不一定是图灵完备的)都是编程语言。
标签: java compiler-construction machine-code