問題タブ [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.

0 投票する
1 に答える
1694 参照

c++ - C++ libclang: CXSourceLocation からカーソルを取得すると、間違ったカーソルが返されますか?

私は現在、C++ で libclang を使用して単純なクローン検出器を作成しています。

このプログラムは、構造体を使用してカーソルを格納します。この構造体には、翻訳単位へのポインターと、clang_getCursorLocation(cursor) の呼び出しから取得した CXSourceLocation が含まれます。

このエラーのために、子ビジター関数は各ノードにアクセスし、各カーソルから構造体を作成します。タイプ t_cursorLocation の構造体を使用して、対応するカーソルを取得する次の関数を作成しました。

ただし、一部のカーソルでは、t_cursorLocation 構造体を作成し、それを使用して作成元のカーソルを取得すると、取得されたカーソルは元のカーソルと等しくなりません。例として、子ビジター関数を参照してください。

私の主な機能は次のとおりです。

これを実行したダミーのソース コードは次のとおりです。

ただし、出力は一貫しており、これは特定のカーソルの種類でのみ発生することを示唆しています。

これはバグですか、それとも私が見逃している、または間違っていることがありますか?

前もって感謝します、ジェイコブ

0 投票する
1 に答える
1600 参照

llvm - libclang が意味のある完了結果を返さないのはなぜですか?

libclang でコード補完を行う方法を理解しようとしています。「Thinking beyond the compiler」を見て、c-index-test を調べたところ、簡単なサンプル プログラムが見つかりました

私はそのプログラムをコンパイルし、このサンプル ファイルで実行しました。このサンプル ファイルは、ビデオのものと似ています。

Node-> の後の最初の不完全なスペースでプログラムをポイントすると、いくつかの C キーワードが吐き出されますが、ビデオで言うように Next や Data は吐き出されません。

sumLi の後のスペースを指すと、同じ C キーワードが出力されます。sumLi に「s」が含まれる列を指定すると、sumListNode を出力できますが、それでも他のキーワードと同じ優先度値として割り当てられるため、実際にはすべてを出力するだけです。カーソルの下にあるものを読んで知的な推測をしようとする代わりに、そこに置くことができます。フラグメントの最後ではなく最初にカーソルを置くと、とにかく役立つことを期待して、ストローをつかんでいました。

libclang が提供できるデータの種類と、doxygen からの操作方法、および c-index-test をいじることから、多くのことを学びましたが、それを関連性のあるものにする方法を学んでいません。私が何かを扱うことができるようにデータ。

0 投票する
2 に答える
525 参照

compiler-construction - libclang を使用して文字列から AST を構築する

いくつかの C++ コードを生成し、それを文字列に格納します。libclang を使用して文字列から AST ツリーを構築したいと考えています。どうやってするの?余分なファイルに文字列を入れたくありません。

0 投票する
1 に答える
371 参照

compiler-construction - BinaryOperatorを簡素化するためのlibclangにAPIはありますか

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

0 投票する
3 に答える
1597 参照

python - libclang の Python バインディングを使用して AST トラバーサルでサブツリーをスキップする方法

Pythonバインディングを介してlibclangを使い始めたところです。を使用して構文ツリー (AST) 全体をトラバースできることは理解していますが、関心のないサブツリーをスキップできる関数 (またはそれが呼ばれる可能性のある関数)get_childrenを見つけることができませんでした。get_next_sibling()そのような機能は存在しますか?

0 投票する
2 に答える
1923 参照

objective-c - libclang カーソルからクラス名を取得

Objective-C のメソッド呼び出しにパラメーターのクラス名を抽出しようとしています。私が解析しているコードは次のとおりです。

必要な結果は、「DFDemoDataModelOne」である helpmeh のクラスのタイプです。

これまでのところ、出力する次のコードがあります。"[(DFDataModelContainer).dataModels addObject:helpmeh]"

カーソルから情報を抽出する方法について少し迷っています-クラスをASTダンプすると、必要な情報がすべてそこにあることがわかります(最後の行を参照):

どんなポインタでも大歓迎です!