2011-02-02 14 views
12

हम कक्षा और वस्तु संबंधों के चित्र बनाने के लिए किसी अन्य उपकरण को खिलाने के लिए पर्याप्त जानकारी प्राप्त करने के लिए हमारे विशाल सी ++ स्रोत पेड़ को पार्स करना चाहते हैं, चीजों के समग्र संगठन को समझें आदिपायथन में सी ++ स्रोत का विश्लेषण कैसे करें?

मेरी सबसे अच्छी कोशिश अब तक एक पायथन लिपि है जो सभी .cpp और .h फ़ाइलों को स्कैन करता है, कक्षा घोषणाओं, विधियों इत्यादि का पता लगाने के लिए रेगेक्स खोज चलाता है। हमें प्रत्येक विवरण, या कुछ भारी यूएमएल आरेख जनरेटर को पकड़ने के लिए एक पूर्ण उड़ा विश्लेषक की आवश्यकता नहीं है - इसमें बहुत कुछ है विस्तार हम अनदेखा करना चाहते हैं और हम नए प्रकार के आरेखों का आविष्कार कर रहे हैं। स्क्रिप्ट सॉर्टा काम करता है, लेकिन भगवान द्वारा यह सच है: सी ++ पार्स करना मुश्किल है!

तो मुझे आश्चर्य है कि हमारे स्रोतों से जो जानकारी हम चाहते हैं उसे निकालने के लिए कौन से टूल्स मौजूद हैं? मैं एक भाषा विशेषज्ञ नहीं हूं, और एक सीधी सीखने की वक्र के साथ कुछ नहीं चाहता। कुछ हम कम-नीले नीले रंग के कॉलर प्रोग्रामर ग्रंट्स का उपयोग कर सकते हैं: पी

पायथन को यहां मानक भाषाओं में से एक के रूप में प्राथमिकता दी जाती है, लेकिन यह आवश्यक नहीं है।

+6

सी ++ पार्स करने के लिए कुख्यात रूप से कठिन है, और आपको आमतौर पर ऐसा करने के लिए कुछ सुंदर हेवीवेट उपकरण की आवश्यकता होती है (उदाहरण के लिए जीएलआर पार्सर्स)। अगर मैं सी ++ पार्सिंग का अच्छा अनुमान लगाता हूं तो कुछ आश्चर्यजनक पार्सर्स का उपयोग नहीं किया गया तो मुझे आश्चर्य होगा। – templatetypedef

+0

क्या आपने मानक कंपाइलर-कंपाइलर देखा है? लक्षित भाषा का वर्णन करने के लिए ये एक विशेष भाषा (कुछ प्रकार के विस्तारित बैकस-नौर फॉर्म - कॉलेज को याद करते हैं?) का उपयोग करते हैं। –

+7

क्या आपने जीसीसी-एक्सएमएल (http://www.gccxml.org) का उपयोग करने पर विचार किया और फिर परिणामी एक्सएमएल फाइल की प्रसंस्करण के लिए पायथन? – 6502

उत्तर

11

मैं बस Clang की सिफारिश करूंगा।

यह एक सी ++ लाइब्रेरी-आधारित कंपाइलर है जो दिमाग में पुन: उपयोग की आसानी से डिज़ाइन किया गया है। इसका उल्लेख यह है कि आप इसे पूरी तरह से पार्सिंग और सार सिंटेक्स ट्री उत्पन्न करने के लिए उपयोग कर सकते हैं। यह सभी थकाऊ ऑपरेटर ओवरलोडिंग रिज़ॉल्यूशन, टेम्पलेट इंस्टेंटेशन आदि का ख्याल रखता है।

क्लैंग एक सी-आधारित इंटरफ़ेस निर्यात करता है, जिसे पायथन बाइंडिंग के साथ बढ़ाया जाता है। इंटरफ़ेस आमतौर पर काफी समृद्ध है, लेकिन मैंने इसका उपयोग नहीं किया है। वैसे भी, यदि आप इसे विस्तारित करने में मदद करना चाहते हैं तो योगदान का स्वागत है।

+0

मुझे नहीं पता था कि क्लेंग पहले से ही ऐसे राज्य में था। यह बात बताने के लिए धन्यवाद! –

+0

मैंने पूरी चीज को संकलित करने के लिए सीएलएंग की कोशिश की है, लेकिन कुछ पार्सिंग में कुछ अस्पष्ट लैकुने ने निर्माण को बहुत दूर जाने से रोक दिया है। फिर से कोशिश करने लायक है, हालांकि, मुझे त्रुटि संदेश पसंद हैं जो समझ में आता है। स्रोत का विश्लेषण करने और भवन बनाने के लिए, यह शायद सबसे अच्छा उपकरण हो सकता है। – DarenW

+0

एफडब्ल्यूआईडब्ल्यू, आधिकारिक क्लैंग वेबसाइट क्लेंग को लोअरकेस एल –

6

आप जीसीसीएक्सएमएल और ओपनसी ++, साथ ही साथ डॉक्सिजन देख सकते हैं।

+0

ओपनसी ++ दांत में काफी लंबा हो रहा है। –

+0

"दांत में लंबे समय" का क्या अर्थ है? – tenfour

+0

@tenfour: दांत में लंबे समय तक === पुराना (इसका कारण है कि पुराने लोगों में लंबे समय तक दांतों का दांत होता है)। –

0

मैं प्लाई के साथ अच्छा अनुभव प्राप्त हुआ है:

http://www.dabeaz.com/ply/

लेकिन इस लेक्स और याक

+3

यदि आप एक पूर्ण सी ++ पार्सर चाहते हैं, तो आप इसे स्वयं बनाना नहीं चाहते हैं, जब तक कि आप इसे कैरियर बनाना न भूलें। मुझ पर विश्वास करो। –

+1

ओपी ने क्या पूछा नहीं है।जीसीसी से एएसटी को पकड़ना शायद सबसे अच्छा है, लेकिन ओपी को पूर्ण पार्सिंग –

+0

नहीं लगता है अगर वह पूर्ण पार्सर का उपयोग नहीं करता है, तो उसके उत्तर सटीक नहीं होंगे। अगर उसे परवाह नहीं है कि उसके जवाब सही हैं, तो शायद एक हैक काम करेगा। यह आमतौर पर अंत में असंतुष्ट होने के समाप्त होता है। –

1

आप हमारी आवश्यकताओं की क्या कहते हैं से के साथ कुछ अनुभव की आवश्यकता है, GccXML के टोनी जवाब शायद हो जाएगा सबसे बढ़िया विकल्प। यदि यह काम नहीं करता है, तो आप अपने प्रोग्राम की रूपरेखा को cscope या ctags के साथ उत्पन्न करने का प्रयास कर सकते हैं, और उसके बाद अपने आउटपुट से इच्छित जानकारी के लिए अपना रास्ता तैयार कर सकते हैं।

+0

-x विकल्प के साथ सीटीएजी जो मैं बनाने की कोशिश कर रहा हूं उसके समान जानकारी लिखता हूं। हालांकि यह बिल्कुल सही नहीं है। हो सकता है कि इसे मेरी जरूरत में मालिश किया जा सके। – DarenW

3

क्या आप प्रीप्रोकैसिंग चरण चला सकते हैं? डॉक्सिजन अधिकांश सी ++ सिंटैक्स पार्स करता है और सभी रिश्तों के साथ एक्सएमएल बनाता है। कंपाइलर डीबग डेटाबेस भी बनाते हैं (आमतौर पर जीसीसी से बौना प्रारूप और एमएससी से कोडव्यू प्रारूप)।

+0

हम डॉक्सिजन का उपयोग करते हैं, लेकिन क्या इसका मतलब यह होगा कि मुझे एक्सएमएल का विश्लेषण करना है जो मैं चाहता हूं? – DarenW

+0

@DarenW: पायथन में एक एक्सएमएल लाइब्रेरी है, है ना? इसलिए पार्सिंग के सभी कड़ी मेहनत आपके लिए की जानी चाहिए, आपको केवल इच्छित विवरण खींचने के लिए ऑब्जेक्ट मॉडल का उपयोग करने की आवश्यकता है। –

1

आपने उन टूल्स के लिए कहा जो सी ++ से जानकारी निकाल सकते हैं।

हमारे DMS Software Reengineering Toolkit कस्टम विश्लेषकों के निर्माण के लिए कॉन्फ़िगर करने योग्य कंपाइलर तकनीक है। इसमें एक प्रीप्रोसेसर के साथ पूर्ण C++ Front End है, एएसटी निर्माण (टिप्पणियों को पकड़ने सहित) के साथ पूर्ण सी ++ पार्सिंग, और पूर्ण प्रतीक तालिका है। इनका उपयोग ऐसी संरचनात्मक जानकारी निकालने के लिए किया जा सकता है, और जिसे आप इसे संसाधित करना चाहते हैं उसे निर्यात कर सकते हैं।

संपादित करें: टिप्पणियों में से एक यह है कि दुनिया में केवल 3 पूर्ण सी ++ पार्सर्स हैं। मुझे और संदेह है; निश्चित रूप से आईबीएम एक है जो काम करता है। एमएमएस विजुअल स्टूडियो और जीएनयू सी ++ स्रोत कोड दोनों में बड़े अनुप्रयोगों पर क्रोध में डीएमएस के सी ++ फ्रंट एंड का उपयोग किया गया है, इसलिए यह उचित रूप से योग्य भी हो सकता है: -

0

यदि आप विंडोज़ का उपयोग करके इस विश्लेषण को चलाने के लिए खुद को ला सकते हैं - प्लेटफार्म एप्लिकेशन, अपने आप को बहुत समय और परेशानी बचाएं, और स्पैक्स सिस्टम द्वारा एंटरप्राइज़ आर्किटेक्ट पर $ 200 खर्च करें (मुझे इस कंपनी के साथ कोई संबद्धता नहीं है, केवल एक संतुष्ट ग्राहक है)। (नोट: इसे विजुअल स्टूडियो के लिए माइक्रोसॉफ्ट के अपने "एंटरप्राइज़ आर्किटेक्ट" बंडल से भ्रमित नहीं किया जाना चाहिए।)

ईए सी ++, सी, जावा और पायथन सहित कई भाषाओं को रिवर्स-इंजीनियर कर सकता है, जो कुछ बहुत अच्छा यूएमएल उत्पन्न करता है कक्षा आरेख। (ईए कई अलग-अलग पैकेजों में आता है, डेस्कटॉप सबसे सस्ता है, लेकिन कोड इंजीनियरिंग इंजीनियरिंग सुविधा प्राप्त करने के लिए आपको पेशेवर, दूसरा सबसे सस्ता है।) मुझे जेनरेट क्लास आरेख और अनुक्रम आरेखण के बीच एकीकरण भी पसंद है, जहां आप ऑब्जेक्ट लाइफलाइन के बीच एक रेखा खींच सकते हैं और लक्षित ऑब्जेक्ट की श्रेणी परिभाषा के आधार पर परिभाषित विधियों का मेनू आपको प्रस्तुत किया जाता है। मेरे पूर्व परामर्श व्यवसाय में, हमने इस उपकरण का उपयोग सिस्टम आर्किटेक्चरल प्रस्तावों को विकसित करने के लिए काफी कुछ किया था जिसे हमने तब हमारी परियोजना बोली के हिस्से के रूप में शामिल किया था (केवल आरेख दस्तावेज़ में कॉपी/पेस्ट करें)। यह आपके $ 200 वापस करने में लंबा समय नहीं लगेगा।

+0

कुछ जो पैसा खर्च करता है और विंडोज़ पर चलता है वह यहां उड़ने वाला नहीं है, लिनक्स आधारित भौतिकविदों से भरा एक छिद्र। आपने इसे ज्यादातर नए सिस्टम के लिए इस्तेमाल किया है? क्या मौजूदा विशाल कोड बेस की समझ हासिल करना अच्छा है? – DarenW

+3

यह मजाकिया है कि हम कैसे सोचते हैं कि हफ्तों के दौरान आंशिक समाधान लिखना 200 डॉलर खर्च करने से बेहतर है - आम तौर पर इसे पॉइंटी बालों वाली बॉस सोच माना जाता है। हां, मैंने इसे मौजूदा कोड बेस की बड़ी तस्वीर प्राप्त करने के लिए उपयोग किया है, आप वास्तव में इसे कोड युक्त निर्देशिका में इंगित करते हैं, भाषा और फ़ाइल एक्सटेंशन चुनें और "जाओ" पर क्लिक करें। निश्चित रूप से, यह कुछ जटिल जटिल आरेख उत्पन्न कर सकता है, लेकिन यह आपकी निर्देशिका और/या पैकेज संरचना के अनुसार चित्रों को तोड़ देगा, और आप तथ्य के बाद आरेख को सरल बना सकते हैं। – PaulMcG

संबंधित मुद्दे