使用Clang作为API

Raf*_*fid 0 code-generation llvm clang

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

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

def class Adder
   def func Add(x as int, y as int) as int
     return x + y
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Eli*_*sky 5

最简洁的答案是不.

更长的答案是,Clang只是从C++(和C和ObjC)到LLVM IR的编译器,通过AST.它的外部API都与编译和分析C++有关.

一旦将类似于样本的语言解析为AST,您所需要的就是构建LLVM IR的LLVM API.LLVM教程是一个完美的开始.

现在,并不是说Clang对你没用.Clang将C++编译为LLVM IR.因此它具有处理OOP构造的代码以及比LLVM IR更高级别的所有其他C++构造.你可以通过阅读它的代码来学习它正在做什么,但AFAIK这些都不是真正的公共API.