現在、clang C API を使用して C++ コードのパーサーを構築しています。パーサーはヘッダー ファイルを処理し、定義済みシンボルと不足しているシンボルのリストを生成します (インクルード ディレクティブを無視するため、ヘッダーの内容を厳密に解析します)。私の問題は、次typedef
のような未定義の型の引数を取る関数ポインターがある場合です。
typedef SOME_TYPE (* funcPtrName)(SOME_UNDEF_TYPE x);
AST はSOME_TYPE
ではなく typedef として解析しますfuncPtrName
。に置き換えるSOME_UNDEF_TYPE
と、正しくint
解析されます。funcPtrName
clang_tokenize
カーソルのすべてのトークンを取得し、関数ポインター名を手動で取得するために使用できると思いclang_getCursorExtent
ましたが、typedef を指すカーソルでの呼び出しは正しく機能しません (返される範囲は 0,0 です)。
この問題を回避する方法を知っていますか?