यदि यह सादा सी है, lex
और yacc
अपने दोस्त हैं, लेकिन आप खाते सी पूर्वप्रक्रमक पर लेने की जरूरत - अविस्तारित मैक्रो के स्रोत फ़ाइलों को आम तौर पर सी वाक्य रचना का पालन नहीं करते हैं, इसलिए पार्सर, में कश्मीर & आर व्याकरण के साथ लिखा दिमाग, सबसे अधिक संभावना असफल हो जाएगी।
यदि आप प्रीप्रोसेसर के आउटपुट को पार्स करने का निर्णय लेते हैं, तो तैयार रहें कि आपका पार्सर आपके विशेष कंपाइलर के "एक्सटेंशन" के कारण विफल हो जाएगा, क्योंकि मानक लाइब्रेरी हेडर उनका उपयोग करते हैं। कम से कम यह जीसीसी के साथ मामला है।
मैं जीसीसी के साथ इस किया था और अंत में विभिन्न दृष्टिकोण का उपयोग कर अपने लक्ष्य को प्राप्त करने के लिए फैसला किया। यदि आपको चर के लिए नाम बदलने की जरूरत है, तो नियमित अभिव्यक्तियां ठीक होंगी, और पूर्ण पार्सर, IMHO बनाने की कोई आवश्यकता नहीं है। यदि आपका लक्ष्य केवल डेटा एकत्र करने के लिए है, तो डेटा का अंतिम स्रोत डीबग जानकारी है। बाइनरी से डीबग जानकारी प्राप्त करने के तरीके हैं - डीडब्ल्यूएआरएफ के साथ ईएलएफ एक्जिक्यूटिव के लिए विंडोज़-लैंड (सीओएफएफ?) के लिए libdwarf भी कुछ होना चाहिए। शायद आप बाइनरी के बारे में डीबग जानकारी प्राप्त करने के लिए कुछ मौजूदा टूल्स का उपयोग कर सकते हैं - फिर से, मुझे विंडोज़ के बारे में कुछ नहीं पता है, आपको जांच करने की आवश्यकता है।
यह भी देखें: http://code.google.com/p/pycparser/ –
धन्यवाद, मैं इसे सूची में जोड़ दूंगा। – luke