मैं अपने आवेदन के स्रोत कोड को पुन: सक्रिय करने में सहायता के लिए एक साधारण टूल लिख रहा हूं। मैं WxWidgets लाइब्रेरी के आधार पर C++ कोड को पार्स करना चाहता हूं, जो कि GUI को परिभाषित करता है और Qt के साथ उपयोग करने के लिए XML .ui
फ़ाइल का उत्पादन करता है। मुझे सभी फ़ंक्शन कॉल और तर्कों का मूल्य प्राप्त करने की आवश्यकता है।क्लेंग के लिए पाइथन बाइंडिंग का उपयोग करके एकल फ़ाइल को कैसे पार्स करें?
वर्तमान में मैं क्लैंग के लिए पाइथन बाइंडिंग के साथ टॉयइंग कर रहा हूं, नीचे दिए गए उदाहरण कोड का उपयोग करके मुझे टोकन और उनकी तरह और स्थान मिलता है, लेकिन कर्सर प्रकार हमेशा 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)
कर्सर प्रकार निर्धारित करने का सही तरीका क्या है?
मुझे कुछ ब्लॉग पोस्ट को छोड़कर कोई दस्तावेज नहीं मिला, लेकिन वे पुराने थे या इस विषय को कवर नहीं कर रहे थे। मैं न तो क्लैंग के साथ आए उदाहरणों से इसे काम करने में असमर्थ था।
क्या आप 'सूची के आउटपुट (f.s.get_includes() में f के लिए f.source.name दे सकते हैं? (बस इसे अपनी स्क्रिप्ट के अंत में प्रिंट करें) – forivall
बस एक और अन्य सी कंपाइलर्स की तरह, फ़ोल्डर को ठीक से सेट करना होगा, index.parse (sys.argv [1], args = ['I./path/to/ ',' I/another/include '] शामिल करें) –
किसी और की नौकरी रखना कोई शर्म की बात नहीं है, बस इसका उल्लेख करना न भूलें: आपका कोड किसी भी तरह एली के पृष्ठ में पहले उदाहरण के समान ही है: http: //eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang –