【问题标题】:Is there a bytecode back-end (like LLVM) that has a tool to translate the assembled bytecode into machine code?是否有一个字节码后端(如 LLVM)具有将组装的字节码转换为机器码的工具?
【发布时间】:2014-08-02 06:26:19
【问题描述】:

我认为您可以使用其中一个内置工具直接将 LLVM 字节码转换为机器码,但根据SO post,您必须实际提供前端和后端。 LLVM 实际上只是一个应用优化的工具:

“LLVM 可以用作编译器框架,您可以在其中提供“前端”(解析器和词法分析器)和“后端”(将 LLVM 的表示转换为实际机器代码的代码)。”

所以我的问题是:是否有一个可以使用的框架,您只需将字节码编译器写入该框架的字节码语言,然后由框架编译成适当的机器码?

如果有,那么编写编译器似乎不会比编写字节码编译器(基本上是词法分析器/解析器和翻译)更复杂。我从未编写过编译器,但似乎您需要生成几种不同类型的汇编代码(基于不同的体系结构),然后将其组装以使其有用,但如果有一些中间框架可以做这个后端部分,那么这将花费大量的汗水。我认为 LLVM 做到了这一点,但我目前基于上述的理解是它没有。

对不起,如果这是一个愚蠢的问题,我只是对整个事情感到好奇,我对此了解不多。

【问题讨论】:

    标签: compiler-construction llvm bytecode-manipulation


    【解决方案1】:

    LLVM 已经包含一系列用于各种流行架构的后端,包括 x86。所以理论上,如果你想创建一种新语言,你只需为该语言编写一个 LLVM 前端就可以了——你得到了一个适用于多种架构的编译器。

    在实践中,仅仅编写前端可能还不够(例如,如果您需要一些运行时库或内存管理),但对于某些语言来说绝对足够了。事实上,这是 gcc 和 LLVM 等系统背后的主要理念之一——您可以只添加一个前端并免费获得架构支持(或者,只需添加一个后端并允许将多种语言编译到其中)免费)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多