1

コードを変換したいのですが、「1 + a + 2」から「a + 3」などの二項演算子を単純化します。libclang にそのようなことができる API はありますか?

4

1 に答える 1

2

あまり。

Clang を LLVM への C/C++/ObjC フロントエンドと呼んでいる場合、私が知っているそのような API はありません。これは、フロントエンドが行うように設計されている種類のものではありません。

LLVM コア (完全なコンパイラと呼ぶ場合は Clang の一部) は、これらの種類の処理を実行できますが、ソース言語に変換する API はありません。

このようなことを行うための最善の策は、Clang ベースのツールを作成してソースを変更することだと思います (例としてLibFormatを参照してください)。ただし、最初にこれが必要な理由を再考することをお勧めします。これはコンパイル中に発生するためです。パフォーマンスは向上せず、コードが読みにくくなる可能性があります。

一般に、パフォーマンス上の理由から特定の変換を追加したいが、現時点ではコンパイル中に行われない場合、ソース プログラムを変更するのではなく、コンパイル中に実行されるLLVM パスを記述するのが正しい方法です。修正を実行します。Clangはそれに関与していません。

于 2013-05-12T08:08:30.107 に答える