私は、アプリケーションのソースコードをリファクタリングするための簡単なツールを作成しています。 GUIを定義してXMLを生成するwxWidgetsライブラリに基づいてC++コードを解析したいと思います。.ui
Qtで使用するファイルです。私はすべての関数呼び出しと引数の値を取得する必要があります。Pythonバインディングを使用してClangに単一のファイルを解析する方法は?
現在、以下のサンプルコードを使用して、ClangのPythonバインディングを使用しています。トークンとその種類と場所を取得しますが、カーソルの種類は常にCursorKind.INVALID_FILE
です。
import sys
import clang.cindex
def find_typerefs(node):
""" Find all references to the type named 'typename'
"""
for t in node.get_tokens():
if not node.location.file != sys.argv[1]:
continue
if t.kind.value != 0 and t.kind.value != 1 and t.kind.value != 4:
print t.spelling
print t.location
print t.cursor.kind
print t.kind
print "\n"
index = clang.cindex.Index.create()
tu = index.parse(sys.argv[1])
print 'Translation unit:', tu.spelling
find_typerefs(tu.cursor)
カーソルの種類を判別する正しい方法は何ですか?
は、私はいくつかのブログの記事を除く任意のドキュメントを見つけることができませんでしたが、彼らは古いか、このトピックをカバーしませんでした。私はClangに付属している例からそれを取り除くこともできませんでした。
あなたは 'リスト(tu.get_includesでfに対するf.source.name())'の出力が得られませんでしたか?ちょうど別の他のCコンパイラのように、含まれたフォルダがindex.parse(sys.argvの[1]、引数= [ 'I./path/to/、適切に設定する必要があります – forivall
(ちょうどあなたのスクリプトの最後にそれを印刷) http:あなたのコードは何とかイーライのページの最初の例と非常によく似ています:それはちょうどそれを言及するのを忘れないでください、誰かの他の仕事に置くことを恥ではありません –
)「、 『I./another/include』]次のとおりです。 //eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang –