【问题标题】:Virtual Machine Language Development虚拟机语言开发
【发布时间】:2014-05-29 03:59:07
【问题描述】:

这是我的第一篇文章,我是通过手机发帖的,所以请原谅我肯定会遇到的格式问题。

正如标题所示,我想为自己编写的小型虚拟机创建一种语言。目前我的虚拟机非常简单,支持大约 16 种不同的操作码。我一直在慢慢学习如何优化 VM 并为其添加更多功能。我想添加的最大功能是能够用简单的 C 派生语言编写程序。

我什至不知道如何开始编写这样的“语言”。我会把它写成一个翻译成我的虚拟机汇编代码的解释器吗?

任何帮助都会很棒。文章、书籍、讲座,我什么都愿意。我只是喜欢学习,到目前为止,这是我参与过的最大的项目,也是迄今为止我最喜欢的项目。

编辑

我希望我在正确的领域提出了问题,并且如果需要,我非常愿意在早上提供更多信息。

【问题讨论】:

  • 您基本上是在考虑移植一些工具链来为您的机器创建二进制文件。对于编译器部分,您只需要创建自定义后端。由于 GCC 和 LLVM 是两个流行的选项,你应该看看那里。
  • 我认为这是正确的词,工具链。但是,我从未打算将其编译为本机代码。更多的是编写一种基于 C 的小型语言,该语言可以编译成我的 VM 可执行格式。
  • 从阅读有关编译器的书开始。
  • 有什么建议吗?我已经订购了一本《龙之书》,但我犹豫是否要购买任何...更现代的...书籍。
  • 正在制作编译器。目标“本机”代码恰好是您的人工指令集。

标签: assembly language-design vm-implementation compiler-construction


【解决方案1】:

假设你的指令集足够强大,你应该能够为它构建一个编译器(代码翻译器)。解释器也是可能的,但如果您可以从 C 编译,您就可以解锁整个社区代码。

根据您的评论,您有权订购编译器写作的圣经:Compilers: Principles, Techniques, and Tools 在您掌握那本书之前,我会推迟阅读其他书籍;然后你就会知道你想去哪里。

您将学习语法、解析器等所有知识,但随后您需要做出一些实际的决定。避免构建编译器的大部分工作的一种选择是仅为现有编译器(例如 GCC 或 Clang)构建后端(通过LLVM)。通过构建后端,您还可以使用多种语言前端之一进行编译,例如 D;因此,只需一次努力,您就可以获得 C++、D 等的编译器。

【讨论】:

    【解决方案2】:

    在购买/阅读编译器书籍并从根本上了解编译器的工作原理后,我建议您使用 LLVM 来完成您的任务。具体来说,专注于创建一个目标,根本不用担心前端(词法分析/解析器生成器/AST)。这样您就可以支持任何生成 LLVM IR 的语言。

    首先查看 LLVM 独立于目标的代码生成器框架,这就是你将发挥你的魔力的地方:

    http://llvm.org/docs/CodeGenerator.html

    LLVM 目标无关代码生成器是一个框架,它提供了一套可重用的组件,用于将 LLVM 内部表示转换为指定目标的机器码——无论是汇编形式(适用于静态编译器)还是二进制机器代码格式(可用于 JIT 编译器)。

    此外,LLVM 可以很好地指导您完成后端的开发,这是您感兴趣的部分:

    http://llvm.org/docs/WritingAnLLVMBackend.html

    它概述了执行此类任务所需的先决条件阅读。这包括代码示例、优化技术、如何执行指令选择和指令打印(针对您的 VM)。最后,如果需要,如何支持 JITing。

    如果您下载源代码,有许多完整的后端可以根据您的虚拟机的要求进行分支和修改。

    【讨论】:

    • 非常感谢您的意见。也感谢您提供的链接。我没有太多时间真正坐下来了解编译器并完整阅读这些文章,但从前几段来看,它们似乎是极好的资源。
    【解决方案3】:

    我应该问,这是基于堆栈还是寄存器的虚拟机?

    每个人都有优点和缺点。如果您希望您的语言尽可能快地运行,我建议使用注册机;如果你想要它简单,比堆栈机。

    就像其他人建议的那样,您可以将一种语言编译为 LLVM,当然这取决于您的需求。

    【讨论】:

      猜你喜欢
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 2014-04-11
      相关资源
      最近更新 更多