2009-10-25 9 views
6

मैं एक पाइथन स्क्रिप्ट को सी/सी ++ फ़ाइल में परिभाषित सभी कार्यों की सूची मुद्रित करना चाहता हूं।पायथन स्क्रिप्ट सी/सी ++ फ़ाइल की सभी फ़ंक्शन परिभाषाओं को मुद्रित करने के लिए

उदा।

void func1() { } 
int func2(int i) { printf("%d", i); return 1; } 

मैं सिर्फ फ़ाइल (abc.c) खोज और सभी कार्यों (फ़ंक्शन नाम केवल) उस में परिभाषित प्रिंट करना चाहते हैं: abc.c के रूप में दो कार्यों को परिभाषित करता है। उपरोक्त उदाहरण में, मैं पाइथन लिपि का उपयोग कर func1, func2 प्रिंट करना चाहता हूं।

+1

क्या आप जानते हैं कि फ़ंक्शन की पहचान कैसे करें और आप कैसे कार्यान्वित करना चाहते हैं, या आप पूछ रहे हैं कि सी फ़ंक्शन डीफ़ की पहचान कैसे करें? – foosion

उत्तर

3

मैं प्लाई लेक्स/याक उपकरण का उपयोग कर सुझाव है। एक प्रीबिल्ट सी पार्सर है, और पार्सर स्वयं बहुत तेज़ है। एक बार जब आपके पास फ़ाइल पार्स हो जाए, तो सभी कार्यों को ढूंढना मुश्किल नहीं होना चाहिए।

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

1

मज़बूती से ऐसा करने के लिए, आप एएसटी पार्सर का उत्पादन से सी या सी ++ कोड पार्स, और फिर हड़पने के लिए कार्यशील परिभाषाएँ आवश्यकता होगी।

सी पार्स करने के लिए काफी आसान है। pavpanchekha उल्लेख के रूप में, पार्सर प्लाई एक सी पार्सर के साथ आता है, और निम्न प्रासंगिक परियोजनाओं बनाने के लिए इस्तेमाल किया गया है:

पार्सिंग सी ++ कोड अधिक जटिल है .. "Is there a good Python library that can parse C++" सहायता की होनी चाहिए:

सी ++ पार्स करने के लिए कुख्यात रूप से कठिन है। अधिकांश लोग जो इसे करने का प्रयास करते हैं, वे एक कंपाइलर को अलग करते हैं। असल में यह (भाग में) क्यों एलएलवीएम शुरू हुआ: ऐप्पल को एक तरह से जरूरी था कि वे एक्सकोड में उपयोग के लिए सी ++ का विश्लेषण कर सकें, जिस तरह से संकलक ने इसे पार्स किया था।

यही कारण है कि GCC_XML जैसी परियोजनाएं हैं जिन्हें आप एक पायथन xml लाइब्रेरी के साथ जोड़ सकते हैं।

अंत में, यदि आपके कोड बिल्कुल मजबूत होने की जरूरत नहीं है, आप कोड हालांकि एक कोड-reformatter indent (सी कोड के लिए) जैसी चीजों के बाहर भी यह स्पष्ट करता चला सकते हैं, तो मैच के लिए रेगुलर एक्सप्रेशन का उपयोग समारोह परिभाषा। हां यह एक बुरा, हैकी, त्रुटि-प्रवण विचार है, और आपको शायद मल्टीलाइन टिप्पणियों में फ़ंक्शन परिभाषाएं मिलेंगी और इस तरह, लेकिन यह काफी अच्छी तरह से काम कर सकती है ..

1

यह पृष्ठ, Parsing C++, कुछ एएनटीएलआर व्याकरण का उल्लेख करता है सी ++ के लिए। चूंकि ANTLR has a Python API यह आगे बढ़ने के उचित तरीके की तरह लगता है।

भले ही पार्सिंग बहुत अधिक जटिल लगती है जो नियमित अभिव्यक्तियां होती है, यह एक ऐसा मामला है जहां किसी और ने आपके लिए लगभग सभी काम किए हैं और आपको केवल पायथन से इंटरफेस करने की आवश्यकता है।

एक अन्य विकल्प है, जहां किसी और आप के लिए सी ++ पार्स करने का काम किया है, pygccxml जो GCCXML, जीसीसी संकलक आंतरिक प्रतिनिधित्व से एक्सएमएल का उत्पादन करने के लिए एक आउटपुट विस्तार का लाभ उठाता है है। चूंकि पाइथन के पास बहुत बड़ा एक्सएमएल समर्थन है, इसलिए आपको केवल ब्याज की जानकारी निकालने की आवश्यकता है।

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