मैं क्लैंग के साथ अंतर-प्रक्रियात्मक डेटा-प्रवाह विश्लेषण कर रहा हूं। वर्तमान में मैं स्रोत फ़ाइलों को पार्स करने और एएसटी आगंतुक को कॉल करने के लिए libtooling का उपयोग कर रहा हूँ। प्रश्न यह है कि मैं कई .c फ़ाइलों के लिए एक एकल एएसटी कैसे बना सकता हूं?एएसटी कई स्रोत फ़ाइलों के लिए क्लैंग
मैंने एएसटी आयात श्रेणी का उपयोग करने की कोशिश की है, लेकिन यह कुछ एएसटी नोड्स के आयात का समर्थन नहीं करता है। इसके अलावा, जब मैं कंपाइलरस्टेंस बनाता हूं और उसका उपयोग करता हूं तो यह कुछ गलत कर रहा है और यह विनाशक में दुर्घटनाग्रस्त हो जाता है।
एक बहुत ही समान विकल्प ASTImportAction था, लेकिन यह मेरे लिए बिल्कुल स्पष्ट नहीं है कि इस मामले में कमांड लाइन पैरामीटर क्लैंगटूल को पास किया जाना चाहिए।
तीसरा विकल्प प्रत्येक .c फ़ाइल के लिए ASTUnits बनाने और उनमें से प्रत्येक में परिभाषाओं को देखने के लिए था, यह स्पष्ट नहीं है कि उपयोगकर्ता-परिभाषित प्रकारों के बीच पत्राचार कैसे प्राप्त करें, उदा। रिकॉर्ड। एएसटीआईपोर्ट में वे IsStructurallyEquivalent() फ़ंक्शन का उपयोग करते हैं लेकिन इसे अज्ञात नेमस्पेस में घोषित किया गया है, इसलिए मैं केवल इस प्रोग्राम को अपने प्रोग्राम में कॉपी कर सकता हूं। और फिर यह सभी एएसटी नोड्स का समर्थन नहीं करता है।
इंटरनेट से यह लिंक http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-August/023865.html सबसे उपयुक्त लगता है लेकिन मेरे लिए समाधान का तकनीकी विवरण स्पष्ट नहीं है।
कोई सुझाव स्वागत है। बहुत धन्यवाद।
आप कई फाइलों के लिए "एक" एएसटी क्यों तैयार करना चाहते हैं? आप बस प्रत्येक फ़ाइल के लिए एक एएसटी क्यों संभाल नहीं सकते? –
मेरी इच्छा है कि किसी के पास इसका जवाब हो: \ मैं अभी वही काम करने की कोशिश कर रहा हूं। –