25

我正在 LLVM 之上引导一个编程语言编译器。目前,我主要为 C 的一个子集编写了一个编译器,该子集是自编译的。完成后,我将引导我的语言远离 C,同时保持自编译。

由于编译器是自编译的,因此我使用的任何 C 功能都必须实现。所以这是一个恒定的平衡:如果我使用了太多的特性,我将不得不实现比我想要的更多,但如果我没有实现足够的特性,那么编写代码就会很困难。

其中一项功能是 LLVM 绑定。在没有 LLVM C 绑定的情况下生成 LLVM 中间表示是很困难的。但是,如果我使用 LLVM 绑定,当我从 C 分支出来时,我必须再次实现它们。

我在这里遇到了一些困难,所以我正在寻找替代解决方案。有任何想法吗?

4

3 回答 3

10

您可以使用 LLVM C 绑定,但这需要您的语言对 C 有足够的了解才能做到这一点。

另一种选择是写出 LLVM 汇编语言(文本文件)并使用 llvm-as 将其转换为位码。


编辑:

我重新阅读了您的问题,我认为您已经了解 llvm-as 与绑定的东西。

无论如何,您的语言可能希望能够绑定到 C 以获取支持库等。现在使用 C 绑定,并在您进一步了解时编写自己的绑定。

于 2010-01-05T21:20:15.357 回答
5

ANTLR + StringTemplate + LLVM 的使用策略

高温高压

于 2010-10-27T00:20:47.150 回答
1

在某些时候,您可能想要提供一个 API 来将 C 库包装为扩展模块。LLVM 可能已经支持这个(我知道 parrot vm 支持)。为什么不使用任何你用来包装 LLVM 自己的 API 的扩展系统呢?他们也可能已经支持这一点。:)

于 2010-01-05T21:25:41.227 回答