2009-09-30 11 views
23

मैं संकलनकर्ता पाठ्यक्रम का अध्ययन कर रहा हूँ, इस कार्यक्रम के संकलन नीचे इस प्रकार कदममैं संकलन के दौरान पार्स पेड़, मध्यवर्ती कोड, अनुकूलन कोड और असेंबली कोड कैसे देख सकता हूं?

  1. शाब्दिक विश्लेषण
  2. सिंटेक्स विश्लेषण
  3. सिमेंटिक विश्लेषण
  4. मध्यवर्ती कोड पीढ़ी
  5. कोड अनुकूलन
  6. लक्ष्य कोड पीढ़ी।

मैं प्रत्येक चरण के आउटपुट को कैसे देख सकता हूं उदाहरण के लिए मैं सिंटैक्स विश्लेषण के बाद पार्स पेड़ देखना चाहता हूं।

मैं जीसीसी कंपाइलर के साथ लिनक्स मशीन पर प्रोग्राम संकलित कर रहा हूं।

हम जीसीसी में -वा कंपाइलर विकल्प का उपयोग कर प्रोग्राम के असेंबली कोड देख सकते हैं, इसी तरह टोकन, पार्स पेड़ और इनेटिमीडेट कोड देखने के विकल्प हैं।

उत्तर

8

आप -E के साथ प्रीप्रोसेसर आउटपुट देख सकते हैं। -fdump-tree-* पेड़ आंतरिक पुनर्भुगतान को डंप करता है, उदा। -fdump-tree-all। आरटीएल इंटरमीडिएट प्रस्तुतियों को डंप करने के लिए विभिन्न -d विकल्प मौजूद हैं, उदा। -fdump-rtl-all (उन आक्रमणों के लिए मैनुअल देखें जिन्हें आप डंप प्राप्त करते हैं); इसके अलावा, -dD सभी मैक्रो परिभाषाओं को डंप करता है।

+2

पाठकों के लिए एक नोट: विकल्प के साथ संकलक पेड़ को स्रोत कोड के नाम से एक फ़ाइल में डंप करता है और '.optimized' जैसे पोस्टफिक्स को छोड़ देता है। यह बिल्कुल स्पष्ट नहीं है, मैंने ≈20 मिनट बिताए, एक प्रलेखन के माध्यम से देखा, और उन मामलों की खोज की जो जीसीसी डंप का उत्पादन नहीं करता है, जब कभी-कभी नई फाइल * पर ध्यान दिया जाता है (जो आसान नहीं है क्योंकि मैंने परीक्षण किया है '/ tmp /', जो सुंदर जंकी है) *। –

15

जबकि आप जीसीसी में -fdump-tree-all और -fdump-rtl-all विकल्पों का उपयोग कर सकते हैं, मुझे नहीं लगता कि उनका आउटपुट एक कंपाइलर छात्र के लिए बहुत उपयोगी है। एफडब्ल्यूआईडब्ल्यू, मैंने अपने पीएचडी अध्ययनों के हिस्से के रूप में जीसीसी पर काम करना शुरू कर दिया है, पहले से ही दो स्नातक पाठ्यक्रम पूरा कर लिया है, और मुझे gcc मिली और इसकी डीबग फाइलें अपारदर्शी और अनुपालन करने में कठोर थीं।

इसके अलावा, जीसीसी वास्तव में संकलकों के पाठ्यपुस्तक डिजाइन का पालन नहीं करता है। कोई भी वास्तव में नहीं करता है, क्योंकि यह इस तरह से अच्छा काम नहीं करता है। मुझे पूरा यकीन है कि जीसीसी एक पार्स पेड़, या एक अमूर्त-वाक्यविन्यास-पेड़ का उत्पादन नहीं करता है। यह एक आईआर (जिसे गिंपल कहा जाता है) बनाता है जिस पर अपने उच्च स्तरीय अनुकूलन करने के लिए।

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

एक और सुझाव, यदि मैं एक पल के लिए अपने आप की सिफारिश कर सकता हूं, तो phc का उपयोग करना है। phc के साथ, आप पार्स पेड़ को एक छवि के रूप में देख सकते हैं, और कंपाइलर में प्रत्येक एकल पास के बाद एएसटी और स्रोत कोड देख सकते हैं। Here is a comparison of parts of the AST and the parse tree। वे phc का उपयोग कर trivially उत्पन्न होते हैं। dataflow शाखा पर, आप कंपाइलर आईआर, सीएफजी, एसएसए फॉर्म, और प्रकार अनुमान और उपनाम विश्लेषण के डीबग आउटपुट देख सकते हैं। आप ऑप्टिमाइज़ेशन भी बदल सकते हैं और उनके पास प्रभाव देखने के लिए पास और बंद हो सकते हैं।

मुझे लगता है कि यह आपके लिए उपयोगी हो सकता है।

+0

अरे कोई रास्ता नहीं, यह आपकी साइट है? आभासी विरासत की उस साइट की व्याख्या शानदार है।पढ़ने के बाद मुझे वास्तव में आभासी "क्यों" मिला और यह सी ऑब्जेक्ट सिस्टम में पूर्वाग्रह कर रहा है। क्या आपके विचार अच्छे शैक्षिक संकलक पर आज अलग हैं? – Praxeolitic

+0

लेकिन 'phc' अपने आप पर एक कंपाइलर प्रतीत होता है, यानी यह जीसीसी की बाइटकोड समझ को कम करने के लिए एक आवेदन नहीं है। –

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