問題タブ [libclang]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - libclang/libtooling 処理するか、すべてのエラー出力をオフにします
すべてはタイトルにあると思います^^ 実は libtooling を使用してツールを開発していますが、すべてのエラーを抑制したいと考えています (ツールは正しいソースでのみ使用することを目的としているため、エラー出力は stderr. ..)。
objective-c - libclang: 実装カーソルからインターフェイス カーソルを取得する
世界!Objective-C メソッドが属するスーパークラスを決定するために libclang を使用しようとしています。インスタンス メソッド (CXCursor_ObjCInstanceMethodDecl) を表すカーソルがあります。カーソルの親を取得すると、種類 CXCursor_ObjCImplementationDecl のカーソルが取得されます。メソッドのスーパークラスを判別するには、この最後のカーソルからインターフェイス カーソルを取得できる必要があります。これを行う方法はありますか?
python - libclang の異なる翻訳単位に AST を再利用する (python バインディング)
libclang に Python バインディングを使用しています。cpp ファイルを解析するとき、cpp に含まれるすべてのヘッダー (または、プリプロセッサ ステップの後の cpp) を解析します。特定のアーティファクトへのすべての参照を見つけようとしていますが、同じヘッダーを複数回参照すると少し遅くなります。
一般的に、翻訳単位ごとに AST が生成されることがわかります。別の翻訳単位で既にアクセスされたヘッダーの AST を再利用する可能性はありますか? または、それを少し速くするための他の提案かもしれません(静的分析のみ、コンパイルなし)。
c++ - clang API を使用して関数ポインタの typedef を解析し、関数ポインタ名を取得するにはどうすればよいですか?
現在、clang C API を使用して C++ コードのパーサーを構築しています。パーサーはヘッダー ファイルを処理し、定義済みシンボルと不足しているシンボルのリストを生成します (インクルード ディレクティブを無視するため、ヘッダーの内容を厳密に解析します)。私の問題は、次typedef
のような未定義の型の引数を取る関数ポインターがある場合です。
AST はSOME_TYPE
ではなく typedef として解析しますfuncPtrName
。に置き換えるSOME_UNDEF_TYPE
と、正しくint
解析されます。funcPtrName
clang_tokenize
カーソルのすべてのトークンを取得し、関数ポインター名を手動で取得するために使用できると思いclang_getCursorExtent
ましたが、typedef を指すカーソルでの呼び出しは正しく機能しません (返される範囲は 0,0 です)。
この問題を回避する方法を知っていますか?
python - Libclang の Python バインディングによって生成された AST は、C++ ソース コード内の特定のトークンを解析できません
私はLibclangのpythonバインディングを使用しています。基本的に2つのクエリがあります:
ユーザーによって定義されておらず、ライブラリが含まれていないライブラリ関数を解析する方法を知りたい..たとえば、次のソースコードがある場合–
- libclang は malloc( ) を解析できません。これは、stdlib がこのコードに含まれておらず、malloc に対してユーザー定義の定義が提供されていないためです。
コンストラクターを使用して定義されていないオブジェクトは、Libclang の AST によって認識されません。たとえば、ソースコードでは -
/li>
push_back( ) ステートメントは解析されませんが、次のように記述した場合:
正しく解析されます。
この動作のもう 1 つの驚くべき兆候は、そのようなオブジェクトが関数パラメーターとしてユーザー定義関数に渡される場合です。例えば
/li>
push_back( ) はまだ識別されていませんが、これが記述されると、物事は正しく解析されます
誰かが回避策を提案できれば素晴らしいでしょう。おそらく、設定時にこれを回避できるフラグがありますか?
c - libclangでtypedefの型と名前を取得しますか?
無名構造体などであれば、typedef の名前と型を取得できますが、通常の typedef (例typedef int size_t
) は しか取得できませんsize_t
。タイプ「int」を取得するにはどうすればよいですか?
python - libclang を使用して関数呼び出しの引数値を取得する方法
clang.cindex.CursorKind.CALL_EXPRカーソルの引数値を取得することは可能ですか?
コンパイラ (clang++ -ast-dump source.cpp) を使用して AST をダンプすると、関数呼び出し (呼び出し式) とその引数に関する情報が得られます。しかし、Python のバインディングを使用して複製することはできません (AST は libclang のパーサーを使用して取得されます)。
私が使用しているソースコードは次のとおりです。
AST ダンプの一部を次に示します。
呼び出し式カーソルを評価して、最終行のIntegerLiteral値の部分を取得したいと思います。