【问题标题】:Create my own (very simple) compiler, using Java使用 Java 创建我自己的(非常简单的)编译器
【发布时间】: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


【解决方案1】:

它会被认为是一个解释器,编译后的代码就是字节码。

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

http://en.wikipedia.org/wiki/Virtual_machine

编辑:您问:“另外:从概念上讲,您是否会说只能创建可以在另一个程序中运行的程序的编程语言仍被视为编程语言?”

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

http://en.wikipedia.org/wiki/Programming_language

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

我们说虚拟机满足这个属性。所以是的,Java(以及其他编译为由适当的虚拟机运行的字节码的语言)是一种编程语言。

【讨论】:

  • 编译器和解释器到底有什么区别? Eclipse中的编译器是编译器还是解释器?
  • 编译器不运行你的程序,这就是区别。
  • 另外:从概念上讲,您是否会说只能创建可以在另一个程序中运行的程序的编程语言仍被视为编程语言?
  • 谢谢。您是否会说用作运行其他程序的平台的程序必须与操作系统具有“恒定连接”才能被视为虚拟机?我不确定,但我认为对 VM 的技术定义是它是另一个平台,程序在其上运行。我假设的虚拟机与任何其他程序一样与操作系统有连接。它是否必须具有“特殊”连接才能被视为 VM?
  • @Xabster,介意详细说明吗?那还有什么不是虚拟机呢?秒杀? STG? LLVM?
猜你喜欢
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
相关资源
最近更新 更多