我认为您可以使用它的内置工具之一直接将LLVM字节码转换为机器代码,但根据这个SO post,您实际上必须提供前端和后端。LLVM实际上只是一个应用优化的工具:
LLVM可用作编译器框架,提供“前端”(解析器和词汇)和“后端”(将LLVM的表示形式转换为实际机器代码的代码)。
因此,我的问题是:是否有一个框架可以用于将字节码编译器编写到该框架的字节码语言中,然后由该框架编译成适当的机器代码?
如果存在,那么编写编译器似乎不会比编写字节码编译器(基本上是lexer/解析器和翻译)更复杂。我从未编写过编译器,但似乎您需要生成几种不同类型的汇编代码(基于不同的体系结构),然后进行组装才能使其有用,但是如果有一个中间框架来完成这个后端部分,那么它将耗费大量精力。我认为LLVM做到了这一点,但我目前基于上述的理解是,它没有做到这一点。
抱歉,如果这是个愚蠢的问题,我只是对整件事很好奇,对此我不太了解。
发布于 2014-06-12 03:49:21
LLVM已经包含了一系列用于各种流行架构(包括x86 )的后端。因此,理论上,如果您想要创建一种新的语言,您只需为该语言编写一个LLVM前端,您就完成了--您可以为众多的体系结构提供一个编译器。
在实践中,仅仅编写前端可能还不够(例如,如果您需要一些运行时库或内存管理),但是对于某些语言来说,它绝对足够了。事实上,这是gcc和LLVM等系统背后的主要想法之一--您只需添加一个前端,并免费获得体系结构支持(或者,只需添加一个后端,并允许将许多语言免费编译到其中)。
https://stackoverflow.com/questions/24175759
复制相似问题