2013-01-07 44 views
7

मैं सफलतापूर्वक पार्सिंग स्रोत कोड के लिए सीडीटी के एएसटी एपीआई का उपयोग करने में सक्षम हूं। मेरे प्रश्न में रिवर्स शामिल है: मैं सी एएसटी प्रोग्रामेटिक रूप से कैसे बना सकता हूं, और फिर इसे फ़ाइल में लिखने के लिए कह सकता हूं? मैंने कक्षा एएसटीवाइटर देखा है (लेकिन वह आंतरिक है) और वास्तविक एएसटी बनाने पर कोई ट्यूटोरियल या दस्तावेज नहीं मिल रहा है।सी कोड के निर्माण/लिखने के लिए सीडीटी के सार सिंटेक्स ट्री एपीआई का उपयोग करना?

मुझे एक ऐसा पेपर मिला है जो मैं चाहता हूं कि मैं क्या करना चाहता हूं: Generating Rewritable Abstract Syntax Trees जो ऐसा लगता है कि अगर मैं पेड़ का निर्माण कर सकता हूं और 'खुद को लिख सकता हूं' तो कोड उत्पन्न करना आसान होगा। क्या यह सीडीटी में संभव है और मैं कैसे शुरू कर सकता हूं (अधिमानतः बहिष्कृत/आंतरिक तरीकों के बिना?)

+0

क्या आप सीडीटी आधारित समाधान, या किसी भी समाधान में अधिक रुचि रखते हैं जो आपको सी के लिए मनमाने ढंग से एएसटी बनाने/बदलने देगा, और फिर परिणाम को सुप्रसिंट करेगा? –

+0

इस सवाल को उत्पन्न करने वाली परियोजना पर ध्यान केंद्रित करने के कारण, यह अब एक बड़ी आवश्यकता नहीं है। यदि हम फिर से समीक्षा करते हैं, तो मैं एक सीडीटी आधारित समाधान (यूजीन द्वारा उल्लिखित रिफैक्टरिंग समाधान की तरह) पसंद करूंगा क्योंकि परियोजना एक ग्रहण आधारित प्लगइन है। –

उत्तर

1

मैं आपको CRefactoring और इसके उप-वर्गों (उदा। ExtractFunctionRefactoring) की खोज के साथ शुरू करने की सलाह दूंगा।

कि CDT रिफैक्टरिंग ढांचे को संबोधित करने की कोशिश करता है कई समस्याओं के होते हैं:

  1. परिवर्तन वास्तव में उन्हें स्रोत कोड के लिए करने से पहले उपयोगकर्ता पूर्वावलोकन करते हैं।
  2. सहेजे गए फ़ाइल बग पर संचालित करें (उदा। सहेजे गए स्रोत संपादक में कोड को पुन: व्यवस्थित करें)
  3. नए जेनरेट किए गए कोड में उपयोगकर्ता कोड स्वरूपण सेटिंग्स का सम्मान करें।
  4. कई स्रोत फ़ाइलों में फैले पूर्ववत लेनदेन।

मुझे पूरा यकीन है कि अगर आपको उन सभी सुविधाओं की आवश्यकता नहीं है, तो इन दो वर्गों को एक अच्छा प्रारंभिक बिंदु होना चाहिए।

+0

धन्यवाद। मेरी समस्या एक स्रोत फ़ाइल की एक बार की पीढ़ी है इसलिए मैं रिफैक्टरिंग की सोच भी नहीं रहा था, लेकिन आपके द्वारा पोस्ट की गई कक्षाओं में मुझे आईएनओडी फैक्ट्री नामक एक आशाजनक कक्षा मिली। Http://wiki.eclipse.org/images/b/be/PTPUserDev2012_Ruegg_Refactoring.pdf I (आशा है!) के साथ संयुक्त मैं इसे यहां से समझ सकता हूं। –

2

आप की जरूरत क्या एक ASTWriter उपयोग कर रहा है:

ASTWriter writer = new ASTWriter() 
String code = writer.write(myAST); 

तो फिर तुम एक फ़ाइल जो ग्रहण संसाधन प्लगइन के संदर्भ में है करने के लिए स्ट्रिंग डंप कर सकते हैं।