使用Java创建我自己的(非常简单)编译器

使用Java创建我自己的(非常简单)编译器,java,compiler-construction,machine-code,Java,Compiler Construction,Machine Code,我想尝试创建我自己的非常基本的语言,使用它的非常基本的编译器。所有这些都使用Java 现在,它只需要启用“程序员”就可以将内容打印到屏幕上 我对如何做到这一点有一个想法,我想知道的是:这会被认为是一个真正的“编译器”、一种真正的“语言”和一个真正的“虚拟机”吗?(当然都是非常非常基础的) 我的想法是创建一个用作“IDE”(编辑器和编译器)的程序,以及另一个用作“虚拟机”的程序 这意味着IDE不会将编写的代码编译成一些现有的机器代码,比如Java字节码,而是实际编译成某种由我编写的编译代码 这些编

我想尝试创建我自己的非常基本的语言,使用它的非常基本的编译器。所有这些都使用Java

现在,它只需要启用“程序员”就可以将内容打印到屏幕上

我对如何做到这一点有一个想法,我想知道的是:这会被认为是一个真正的“编译器”、一种真正的“语言”和一个真正的“虚拟机”吗?(当然都是非常非常基础的)

我的想法是创建一个用作“IDE”(编辑器和编译器)的程序,以及另一个用作“虚拟机”的程序

这意味着IDE不会将编写的代码编译成一些现有的机器代码,比如Java字节码,而是实际编译成某种由我编写的编译代码

这些编译后的代码只能被我的“虚拟机”程序理解,并且只能在这个程序中运行。“虚拟机”程序将使用高级Java操作来理解和执行编译后的代码

“虚拟机”程序将是一个Java程序,在JVM上运行

我的问题是:在概念上,这被认为是一个虚拟机,还是“机器代码”?
如果不是,这是否仍然被视为一种“编程语言”,即使它的编译字节码只能在特定程序中运行?

它将被视为一种解释器,编译后的代码将是字节码

要成为一台“虚拟机”,您需要创建与它运行的PC上的“一切”交互的方式。为用户/开发人员提供“打印到屏幕”功能不是虚拟机


编辑:你问:“另外:从概念上讲,你认为一种只能创建可以在另一个程序中运行的程序的编程语言仍然被认为是一种编程语言吗?”

这取决于“其他程序”的功能。如果您询问JVM:是的。维基百科对编程语言的定义可以在这里找到:

编程语言是一种人工语言,旨在 向机器传达指令


我们说虚拟机实现了这个特性。是的,Java(以及其他编译成由适当的虚拟机运行的字节码的语言)是一种编程语言。

编译器和解释器之间到底有什么区别?Eclipse中的编译器是编译器还是解释器?编译器不运行您的程序,这就是区别。另外:从概念上讲,您是否认为只能创建可在另一个程序中运行的程序的编程语言仍然被视为编程语言?谢谢。你会说,作为运行其他程序的平台的程序必须与操作系统保持“持续连接”,才能被视为虚拟机吗?我不确定,但我认为虚拟机的技术定义是它是另一个平台,程序运行在这个平台上。我假设的虚拟机与其他任何程序一样与操作系统有连接。它必须有一个“特殊”的连接才能被视为虚拟机吗?@Xabster,介意详细说明一下吗?那么,还有什么不是虚拟机呢?秘书?STG?LLVM?也许你想退房。代码有一点文档化(不是很好,但也不错),如果您打算做类似的事情,请查看!使用它当然比从头开始编写任何东西都要容易+你也可以为你的新语言获得一个IDE。在JVM之上实现另一个虚拟机有什么意义?只需直接生成JVM字节码,这是一件非常简单和直接的事情。看看ASM库,是的,从一种语言到另一种语言的任何形式的翻译都是编译。任何具有良好定义语义的足够复杂的语言(甚至不一定是图灵完备的)都是编程语言。