使用 Clang 作为 API

Using Clang as an API

我对 Clang API 了解不多,所以请原谅这个愚蠢的问题。

如果我正在为一种与 C++ 具有相同或相似功能的语言构建编译器,我可以使用 Clang API 为我负责代码生成吗?例如,假设我实现了一个解析器来解析以下代码:

def class Adder
   def func Add(x as int, y as int) as int
     return x + y

现在假设我解析了这段代码并且我有它的 AST,我可以使用 Clang API 为我生成这个 class 的代码吗?

我知道我可以使用 LLVM API,我已经这样做了,但是 LLVM 相对较低级别并且它不支持 OOP,所以我必须自己支持它们,这根本不是一件容易的事.所以我想知道是否有办法雇用 Clang 为我完成这项工作。如果是,请提供示例和链接,我将不胜感激。

谢谢

简短的回答是否定的。

更长的答案是,Clang 只是一个从 C++(以及 C 和 ObjC)到 LLVM IR 的编译器,通过 AST。它的外部API都是和编译分析C++相关的

一旦你将像你的示例这样的语言解析为 AST,你需要的正是 LLVM APIs 来构造 LLVM IR。 The LLVM tutorial 是完美的开始。

现在,并不是说 Clang 对你没用。 Clang 将 C++ 编译为 LLVM IR。因此它具有用于处理 OOP 构造和所有其他比 LLVM IR 更高级别的 C++ 构造的代码。你绝对可以通过阅读它的代码来了解它在做什么,但是 AFAIK none 这真的是一个 public API.