मैं आप इस ऑफ-द-शेल्फ की तरह एक उपकरण मिल जाएगा शक है। तो, आपको एक कस्टम उपकरण की आवश्यकता होगी। आप कुछ स्ट्रिंग हैकिंग विधि (उदाहरण के लिए, पर्ल) के साथ ऐसा करने का प्रयास करना चाहते हैं क्योंकि सटीक पार्सिंग सी और सी ++ का विवरण आप इस तरह से विश्वसनीय तरीके से कर सकते हैं। यदि आपको स्ट्रिंग हैकिंग कभी-कभी आपकी फ़ाइलों को नुकसान पहुंचाने पर कोई फर्क नहीं पड़ता है, तो शायद आप इससे दूर हो सकते हैं।
मेरी कंपनी के DMS Software Reengineering Toolkit का उपयोग इस भरोसेमंद मॉड्यूलो को एक चेतावनी करने के लिए किया जा सकता है।
डीएमएस स्पष्ट लैंगेज परिभाषाओं द्वारा पैरामीटर द्वारा संकलित संकलक तकनीक का उपयोग करके स्रोत कोड को पार्सिंग, विश्लेषण और बदलने के लिए जेनेरिक इंजन है। डीएमएस में कई भाषाओं के लिए मजबूत लैंगेज परिभाषाएं हैं, बोलीभाषा की विविधता में सी और सी ++ समेत। डीएमएस सी या सी ++ फ्रंट सिरों का उपयोग करके, आप स्रोत कोड को पार्स कर सकते हैं, एएसटी नामक कंपाइलर डेटा स्ट्रक्चर बना सकते हैं, कोड पर विश्लेषण कर सकते हैं, एएसटी, को बदल सकते हैं और फिर टिप्पणियों और सभी प्रीपेप्रोसेसर निर्देशों सहित संकलित कोड को पुन: उत्पन्न कर सकते हैं।
चेतावनी प्रीप्रोसेसर निर्देशों वाले पार्सिंग स्रोत कोड के साथ करना है: उन्हें अच्छी तरह से संरचित होना चाहिए [उदाहरण के लिए। #ifdef #endif को बयान सीमा में उपयोग किए जाने के विपरीत नियमित जैसे अन्य बयानों के आसपास घोंसला करने की आवश्यकता है। यह सी कोड में कुछ होता है; सी ++ कोड में कम है। हमारा अनुभव यह है कि यदि आप अपने सी कोड को थोड़ा सा संशोधित करने के इच्छुक हैं, आप इस विशेष मुद्दे को दूर कर सकते हैं।
अपने विशिष्ट कार्य के लिए, आप वैज्ञानिक Toolworks के लिए जवाब के रूप में काफी वर्णित कार्य करें:
- एक संकलन इकाई चुनें, और डीएमएस का उपयोग कर इसे पार्स। आपको सभी समान जानकारी प्रदान करना है, जो आप कंपाइलर प्रदान करते हैं, इसलिए यह हेडर फाइलों का पता लगा सकता है, आदि
- डीएमएस आपके संकलन इकाई और सभी शीर्षलेख फ़ाइलों दोनों के लिए एएसटी उत्पन्न करता है।
- हेडर और संकलन इकाई में घोषणाओं के क्रम निकालने के लिए एएसटी चलाएं।
- पुनर्गठन संकलन इकाई पेड़ 3 से प्राप्त आदेश)
- Prettyprint जिसके परिणामस्वरूप संकलन इकाई एएसटी
[बल्कि वैज्ञानिक Toolworks से डीएमएस के साथ ऐसा करने का एक कारण है कि डीएमएस लिए बनाया गया है के अनुसार पार्स/ट्रांसफॉर्म/कोड पुन: उत्पन्न करें, जबकि SciTool IMHO वास्तव में केवल को पार्स करने और विश्लेषण करने के लिए डिज़ाइन किया गया है। डीएमएस विज्ञान के लिए आवश्यक बढ़िया विवरण तक पहुंच प्रदान करता है, कम से कम आखिरी बार मैंने देखा नहीं है] SciTools नहीं करता है।
सशर्त, मैक्रोज़, नामस्थानों की वजह से जटिलताओं का कारण बन जाएगा ... लेकिन आप संकल्प के लिए नीति तय करेंगे। उदाहरण के लिए, यदि किसी हेडर फ़ाइल में #if है ... #else .... #endif, और घोषणाएं तब खंड में उनके पास किसी अन्य खंड में भिन्न आदेश है, वांछित क्रम क्या है? क्या होगा अगर शीर्षलेख में मैक्रो द्वारा फ़ंक्शन परिभाषा बनाई गई हो? लेकिन, यह सब बनाता है जो वास्तविक उपकरण, एर, मजेदार बनाता है।
मेरी व्यक्तिगत राय यह है कि आप जो प्रभाव प्राप्त कर रहे हैं उसके लिए यह बहुत काम है। यदि आप यह सब करते हैं, तो आपकी सॉफ़्टवेयर इंजीनियरिंग प्रक्रिया कितनी बेहतर होगी? हम सामान्य रूप से कोडिंग त्रुटियों की जांच के लिए डीएमएस का उपयोग करते हैं, या कोड को उन तरीकों से बदलते हैं जो लोग नहीं कर सकते हैं (उदाहरण के लिए, रनटाइम इंस्ट्रूमेंटेशन अस्थायी रूप से या एओपी जैसी सलाह डालें), जहां यह स्पष्ट है कि एक यांत्रिक इंजन का भुगतान किया गया है।
यह उपकरण '.c' फ़ाइल में तत्वों के साथ क्या करना चाहिए जिसमें '.h' फ़ाइल में कोई समान तत्व नहीं है? उदाहरण के लिए, स्थिर कार्य वैश्विक कार्यों से संबंधित हो सकते हैं और उनके पहले या बाद में स्थित हो सकते हैं। – jilles
यह आवश्यकताओं की सूची पर नहीं है। यदि उपरोक्त आवश्यकताओं को पूरा करने वाला कोई उपकरण मौजूद है, तो मुझे यकीन है कि यह इस मामले को संभालने में सक्षम होगा। – Joe