1

我想对我的代码进行转换,它简化了二进制运算符,例如“1+ a+ 2”到“a+3”,那么 libclang 中是否有任何 api 可以做这样的事情?

4

1 回答 1

2

并不真地。

如果您将 Clang 称为 LLVM 的 C/C++/ObjC 前端,那么我所知道的没有这样的 API - 这不是前端设计要做的事情。

LLVM 核心(如果您将其称为完整的编译器,它是 Clang 的一部分)可以做这些事情,但是没有 API 可以将其翻译回源语言。

我认为你最好的办法是编写一个基于 Clang 的工具来修改源代码(以LibFormat为例)。但是,我建议您重新考虑为什么首先需要它 - 因为这无论如何都会在编译过程中发生。您不会获得任何性能,并且您可能会降低代码的可读性。

一般来说,如果你出于性能原因想添加某种转换,而目前在编译期间不会发生,那么正确的做法是不要修改源程序,而是编写将在编译期间运行的 LLVM pass并执行修复。Clang 没有参与其中。

于 2013-05-12T08:08:30.107 回答