我想对我的代码进行转换,它简化了二进制运算符,例如“1+ a+ 2”到“a+3”,那么 libclang 中是否有任何 api 可以做这样的事情?
问问题
371 次
1 回答
2
并不真地。
如果您将 Clang 称为 LLVM 的 C/C++/ObjC 前端,那么我所知道的没有这样的 API - 这不是前端设计要做的事情。
LLVM 核心(如果您将其称为完整的编译器,它是 Clang 的一部分)可以做这些事情,但是没有 API 可以将其翻译回源语言。
我认为你最好的办法是编写一个基于 Clang 的工具来修改源代码(以LibFormat为例)。但是,我建议您重新考虑为什么首先需要它 - 因为这无论如何都会在编译过程中发生。您不会获得任何性能,并且您可能会降低代码的可读性。
一般来说,如果你出于性能原因想添加某种转换,而目前在编译期间不会发生,那么正确的做法是不要修改源程序,而是编写将在编译期间运行的 LLVM pass并执行修复。Clang 没有参与其中。
于 2013-05-12T08:08:30.107 回答