問題タブ [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.
python - libclang を使用した関数境界の識別
Eli Benderskyによるこの非常に有益な (しかし少し古い) チュートリアルの助けを借りて、Python + libclang を使用して C++ ファイルを解析することを学んでいます。
私の目的は、C++ ファイルを解析し、それらのファイルに存在する関数の関数境界を特定することです。この形式のpython辞書を構築することを期待しています:
{<func_name>:(<func_start_loc>, <func_end_loc>), ...}
この目的のために、関数名 (または種類cursor.spelling
の AST ノードを使用) と開始位置 (を使用)を取得できます。CursorKind.FUNCTION_DECL
CursorKind.CXX_METHOD
cursor.location
私の質問は、関数の場所の終わりを取得するにはどうすればよいですか
libclang - libclang の CXType から CV タイプ修飾子を削除
libclang を使用してソース ファイルを解析し、ある型への参照を として取得しますCXType
。たとえば、" const std::__1::basic_string<char>
" です (報告によると clang_getTypeSpelling
)。const修飾子なしで同じ型への参照を取得するにはどうすればよいですか?
python - libclang python デフォルト値を持つ関数の引数の数を取得する方法
Pythonバインディングでlibclangを使用しており、CallExprの引数の数を取得しようとしています.メンバー関数にデフォルト値があり、この引数がない状態で呼び出された場合、libclangは関数内の引数の数を返すことがわかりましたcall 式とは異なります。
例えば :
liblcang を使用して ast をトラバースします。
出力 :
sum_def の CALL_EXPR の引数の数として 1 を取得することを期待していますが、それを取得することは可能ですか、それとも自分でコードを解析する必要がありますか?これは本当にやりたくないことです。ありがとうございました。
c++ - OSX High Sierra で libclang にリンクできない
brew で llvm と clang をインストールしました。
ヘッダー ファイル「clang-c/Index.h」を使用してプログラムをコンパイルすると、
プログラムのコンパイルに使用したコマンドは次のとおりです。
OSX High Sierra を使用しています。
clang - clang と libclang を使用して最適化された AST を生成する
ソース ファイルに clang の最適化を適用してから、その AST を生成したいと考えています。フラグを渡そうと-O3
しましたが、無視されているようです。
たとえば、この抜粋されたプログラムの場合、次のようになります。
5 + 5 を 10 に変換する for ループを削除するなど、多くの最適化を適用できます。
を使用してASTをダンプするclang -O3 -Xclang -ast-dump -fsyntax-only a.c
と、最適化フラグなしで同じASTが得られます。
私の目標は、フラグの最適化が渡された TranslationUnit を作成することです。
c++ - libclang 6.0.1 の使用: stddef.h が見つかりません
libclang の使用を開始するために、非常に単純なソース ファイルをロードしようとする非常に単純なプログラムを作成します。「stddef.h」ファイルが見つからないため失敗します。
libclang を使用したプログラムは次のとおりです。
(簡潔にするために、問題の再現に関係のないコードは省略しました)。
そして、ここにロードしようとしているファイル foo.cpp があります。
次のようにソースからコンパイルされた LLVM と Clang 6.0.1 を使用しています。
簡単に検索すると、この有望な投稿が得られます: Clang Error - stddef file not found? 残念ながら、これは llvm 3.5 に関するもので、私は llvm 6.0.1 を使用しています。また、LLVM と Clang をインストールしたディレクトリ $HOME/local には /usr/lib ディレクトリがないため、そこで提案されたソリューションはここでは機能しません。
stddef.h ヘッダーは にあり$HOME/lib/clang/6.0.1/include/stddef.h
ます。このパスを -isystem オプションとして明示的に clang_createTranslationUnitFromSourceFile 呼び出しに追加すると、問題が解決します。
さらに、clang_createTranslationUnitFromSourceFile で使用されるインクルード検索パスは、clang++ で使用されるものと同じではありません。 clang++ foo.cpp
エラーなしで動作します。
どのインクルード パスを追加する必要があるかを判断できるように、clang_createTranslationUnitFromSourceFile および libclang の同様の関数で使用されるインクルード検索パスに関するドキュメントはありますか?
clang ++で使用されるパスと同等の正しいインクルード検索パスを使用してclang_createTranslationUnitFromSourceFileを呼び出す方法に関する他の提案はありますか?
rust - RHEL 7 で librocksdb-sys をコンパイルできないというエラーを解決するにはどうすればよいですか?
Canvas Data Loader を構築しようとしています。ステップ 10 まで行って、 への依存関係を解決するのは非常に簡単でしたcargo build fail
が、過去 4 日間、librocksdb-sys v5.14.2 の依存関係を解決しようとして行き詰まりました。
これらの指示に従ってclangをインストールし、次にこれらの指示に従ってclangでlibcxxをビルドしました。
再度ビルドしようとすると、次のエラーが発生しました。
c++
にインストールされています/usr/include/c++
c++ - cmake: Windows で LIBCLANG_PATH が見つかりません
シンプルなclang ASTカーソルトラベラーを書こうとしています。
https://github.com/dyhe83/clang-AST-cursor-traveler
この次の cmake コードは Linux で正常に動作します。
この例を Windows でも実行したいと思います。
私のLLVMは「C:\Program Files (x86)\LLVM」にビルドされています
しかし、CMakeLists.txt の FIND_LIBRARY 部分を変更した後。
いくつかのエラーが発生します:
また、「C:\Program Files (x86)\LLVM\lib」にライブラリがあります。
Windowsのclangライブラリの正しいパスがどこにあるか知っている人はいますか??
c++ - clang libtooling を使用し、namedDecl ハンドルを持つ変数名のすべての出現箇所の名前を変更する最も簡単な方法は何ですか?
すべての関数、変数、名前空間の抽象名を作成し、現在のものを置き換えるプログラムを作成したいと考えています。この目的のために、clang libtooling のドキュメントと AST ビジターの例を使用しました。次のような他の便利なチュートリアルをインターネットで見つけまし た。関数の名前を変更するツールのこの例 。matcher と replacer の書き方の例。私のコードには、最初のウェブサイトのようなファインダーがたくさんあります:
}
したがって、問題は、その名前のコンテキストでその名前のすべての出現をどのように置き換えるかです。たとえば、正規表現に基づくダムリプレースはグローバル変数とローカル変数を同じ名前に置き換えますが、namedDecl ハンドルを使用すると、検出されたものだけが取得されます。訪問者によって?
c++ - libtooling を使用して複数の翻訳単位間でシンボルを相互参照する方法はありますか?
ライブラリと複数のアプリケーションがあります。Apps から Lib の API への関数呼び出しに関する使用統計を収集したいと考えています。基本的に私の現在のプロセスは次のとおりです。
- すべての関数/メソッドの Lib を解析します
- フォーマットされた方法で情報を出力する
- その出力を使用して、アプリから統計を収集します。
私は現在、USRの形式で相互参照を提供する libclang API を使用しているため、関数のインデックスを作成し、それをアプリの解析時に使用しています。問題は、この API が制限されていることです。そのため、Libtooling に移行したいと考えています。
libtooling の API を調べましたが、似たようなものを見つけることができませんでした。私の質問は、Libtooling を使用してその「相互参照」を実現するための最良の方法は何でしょうか。
例は次のとおりです。
予想される出力は json ファイルです。