是否有一个字节码后端(如LLVM)有一个工具将组装的字节码转换为机器码?

时间:2014-06-12 02:54:13

标签: compiler-construction llvm bytecode-manipulation

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

LLVM已经包含了许多流行架构的后端,包括x86。所以从理论上讲,如果你想创建一种新语言,你可以为这种语言编写一个LLVM前端,而且你已经完成了 - 你有很多架构的编译器。

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