कम्पाइलर डिज़ाइन - कम्पाइलर के चरण
संकलन प्रक्रिया विभिन्न चरणों का एक क्रम है। प्रत्येक चरण अपने पिछले चरण से इनपुट लेता है, अपने स्वयं के स्रोत कार्यक्रम का प्रतिनिधित्व करता है, और अपने आउटपुट को कंपाइलर के अगले चरण में खिलाता है। आइए एक कंपाइलर के चरणों को समझते हैं।
लेक्सिकल विश्लेषण
स्कैनर का पहला चरण एक टेक्स्ट स्कैनर के रूप में काम करता है। यह चरण वर्णों की एक धारा के रूप में स्रोत कोड को स्कैन करता है और इसे सार्थक लेक्सेम में परिवर्तित करता है। लेज़िकल एनालाइज़र टोकन के रूप में इन लेक्सेम का प्रतिनिधित्व करता है:
<token-name, attribute-value>
सिंटेक्स विश्लेषण
अगले चरण को वाक्यविन्यास विश्लेषण या कहा जाता है parsing। यह लेक्सिकल विश्लेषण द्वारा उत्पादित टोकन को इनपुट के रूप में लेता है और एक पार्स ट्री (या सिंटैक्स ट्री) उत्पन्न करता है। इस चरण में, स्रोत कोड व्याकरण के खिलाफ टोकन व्यवस्था की जाँच की जाती है, अर्थात पार्सर जाँचता है कि टोकन द्वारा किया गया अभिव्यक्ति वाक्य-विन्यास सही है या नहीं।
शब्दार्थ विश्लेषण
सिमेंटिक विश्लेषण यह जाँचता है कि क्या बनाए गए पार्स ट्री भाषा के नियमों का पालन करते हैं। उदाहरण के लिए, मानों का असाइनमेंट संगत डेटा प्रकारों के बीच है, और स्ट्रिंग को पूर्णांक में जोड़ना है। इसके अलावा, सिमेंटिक विश्लेषक पहचानकर्ताओं, उनके प्रकार और अभिव्यक्तियों पर नज़र रखता है; उपयोग करने से पहले पहचानकर्ता घोषित किए जाते हैं या नहीं आदि। सिमेंटिक विश्लेषक आउटपुट के रूप में एनोटेट सिंटैक्स ट्री का उत्पादन करता है।
इंटरमीडिएट कोड जनरेशन
सिमेंटिक विश्लेषण के बाद कंपाइलर लक्ष्य मशीन के लिए स्रोत कोड का एक मध्यवर्ती कोड उत्पन्न करता है। यह कुछ अमूर्त मशीन के लिए एक कार्यक्रम का प्रतिनिधित्व करता है। यह उच्च-स्तरीय भाषा और मशीन भाषा के बीच में है। इस मध्यवर्ती कोड को इस तरह से उत्पन्न किया जाना चाहिए कि यह लक्ष्य मशीन कोड में अनुवादित होना आसान बनाता है।
कोड अनुकूलन
अगला चरण मध्यवर्ती कोड का कोड अनुकूलन करता है। अनुकूलन को कुछ ऐसा माना जा सकता है जो अनावश्यक कोड लाइनों को हटा देता है, और संसाधनों को बर्बाद किए बिना प्रोग्राम निष्पादन को गति देने के लिए बयानों के अनुक्रम को व्यवस्थित करता है (सीपीयू, मेमोरी)।
कोड जनरेशन
इस चरण में, कोड जनरेटर मध्यवर्ती कोड का अनुकूलित प्रतिनिधित्व लेता है और इसे लक्ष्य मशीन भाषा में मैप करता है। कोड जनरेटर मध्यवर्ती कोड को (आमतौर पर) री-लोकेबल मशीन कोड के अनुक्रम में अनुवाद करता है। मशीन कोड के निर्देशों का अनुक्रम कार्य करता है जैसा कि मध्यवर्ती कोड करेगा।
प्रतीक तालिका
यह एक संकलक के सभी चरणों में बनाए गए डेटा-संरचना है। उनके प्रकार के साथ सभी पहचानकर्ता के नाम यहां संग्रहीत हैं। प्रतीक तालिका कंपाइलर के लिए पहचानकर्ता रिकॉर्ड को जल्दी से खोजना और उसे पुनः प्राप्त करना आसान बनाती है। गुंजाइश प्रबंधन के लिए प्रतीक तालिका का भी उपयोग किया जाता है।