Uygulamamızın kaynak kodunu yeniden kodlamak için basit bir araç yazıyorum. GUI'yi tanımlayan ve Qt ile kullanılacak XML .ui
dosyasını üreten wxWidgets kitaplığına dayalı C++ kodunu ayrıştırmak istiyorum. Tüm fonksiyon çağrılarını ve argümanların değerini almam gerekiyor.Tek bir dosyayı Python bağlamaları Clang ile nasıl ayrıştırılır?
Şu anda, örnek kod kullanılarak belirteçler ve onların tür ve konum, ancak imleç türü her zaman CursorKind.INVALID_FILE
olduğunu, Clang için Python bağlamaları ile oynuyor.
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)
İmleç türünü belirlemenin doğru yolu nedir?
Birkaç blog yayını dışında herhangi bir belge bulamadım, ancak bu konuyla ilgili güncel olmayan ya da güncel değil. Clang'la gelen örneklerden bunu yapamamıştım.
"Listenin (f.source.name for f tu.get_includes())' çıktısını verebilir misiniz? (sadece komut dosyanızın sonunda yazdırabilirsiniz) – forivall
tıpkı başka bir c derleyicisinde olduğu gibi, include klasörünün düzgün ayarlanması gerekir, index.parse (sys.argv [1], args = ['I./path/to/ ',' I. ''/''/'' '' '' '' '' '' '' 'ekleyin. –
Bir başkasının işini bırakmak utanç verici değildir, sadece bahsetmeyi unutmayın: Kodunuz, Eli'nin sayfasındaki ilk örneğe çok benzer: http: //eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang –