在libclang中是否有任何api来简化BinaryOperator

时间:2013-05-11 05:44:38

标签: compiler-construction llvm clang libclang

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

1 个答案:

答案 0 :(得分:2)

不是。

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

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

我认为做这样的事情最好的选择是编写一个基于Clang的工具来修改源代码(请参阅LibFormat作为示例)。但是,我建议首先重新考虑为什么需要这个 - 因为在编译期间无论如何都会发生这种情况。您将无法获得任何性能,并且可能会使代码的可读性降低。

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