कंपाइलर डिज़ाइन के चरण क्या हैं?
कंपाइलर विभिन्न चरणों में संचालित होता है प्रत्येक चरण स्रोत कार्यक्रम को एक प्रतिनिधित्व से दूसरे में बदल देता है। प्रत्येक चरण अपने पिछले चरण से इनपुट लेता है और अपने आउटपुट को कंपाइलर के अगले चरण में खिलाता है।
एक संकलक में 6 चरण होते हैं। इस चरण में से प्रत्येक उच्च-स्तरीय लैंगुए को मशीन कोड को परिवर्तित करने में मदद करता है। एक संकलक के चरण हैं:
- लेक्सिकल विश्लेषण
- सिंटेक्स विश्लेषण
- शब्दार्थ विश्लेषण
- इंटरमीडिएट कोड जनरेटर
- कोड अनुकूलक
- कोड जनरेटर

ये सभी चरण स्रोत कोड को टोकन में विभाजित करके, पार्स ट्री बनाते हैं, और विभिन्न चरणों द्वारा स्रोत कोड का अनुकूलन करते हैं।
इस ट्यूटोरियल में, आप सीखेंगे:
- कंपाइलर डिज़ाइन के चरण क्या हैं?
- चरण 1: लेक्सिकल विश्लेषण
- चरण 2: सिंटेक्स विश्लेषण
- चरण 3: शब्दार्थ विश्लेषण
- चरण 4: इंटरमीडिएट कोड जनरेशन
- चरण 5: कोड अनुकूलन
- चरण 6: कोड जनरेशन
- प्रतीक तालिका प्रबंधन
- रूटीन को संभालने में त्रुटि:
चरण 1: लेक्सिकल विश्लेषण
जब लेसर एनालिसिस पहला चरण होता है जब कंपाइलर सोर्स कोड को स्कैन करता है। इस प्रक्रिया को दाएं से बाएं, चरित्र द्वारा चरित्र और इन पात्रों को टोकन में समूहित किया जा सकता है।
यहाँ, स्रोत कार्यक्रम से चरित्र स्ट्रीम टोकन की पहचान करके सार्थक अनुक्रमों में समूहीकृत है। यह प्रतीक तालिका में संबंधित टिकटों का प्रवेश करता है और उस टोकन को अगले चरण में पास करता है।
इस चरण के प्राथमिक कार्य हैं:
- एक स्रोत कोड में शाब्दिक इकाइयों को पहचानें
- स्थैतिक इकाइयों को स्थिरांक, आरक्षित शब्दों जैसे वर्गों में वर्गीकृत करें, और उन्हें विभिन्न तालिकाओं में दर्ज करें। यह स्रोत कार्यक्रम में टिप्पणियों पर ध्यान नहीं देगा
- टोकन की पहचान करें जो भाषा का हिस्सा नहीं है
उदाहरण :
x = y + १०
टोकन
एक्स | पहचानकर्ता |
= | असाइनमेंट ऑपरेटर |
य | पहचानकर्ता |
+ | परिवर्धन संचालक |
१० | संख्या |
चरण 2: सिंटेक्स विश्लेषण
सिंटेक्स विश्लेषण सभी कोड में संरचना की खोज के बारे में है। यह निर्धारित करता है कि पाठ अपेक्षित प्रारूप का अनुसरण करता है या नहीं। इस चरण का मुख्य उद्देश्य यह सुनिश्चित करना है कि प्रोग्रामर द्वारा लिखा गया स्रोत कोड सही है या नहीं।
सिंटेक्स विश्लेषण टोकनों की मदद से पार्स ट्री का निर्माण करके विशिष्ट प्रोग्रामिंग भाषा के आधार पर नियमों पर आधारित है। यह भाषा की स्रोत भाषा और व्याकरण या वाक्य रचना की संरचना को भी निर्धारित करता है।
इस चरण में किए गए कार्यों की एक सूची इस प्रकार है:
- लेक्सिकल विश्लेषक से टोकन प्राप्त करें
- जाँचता है कि अभिव्यक्ति वाक्यविन्यास सही है या नहीं
- सभी सिंटैक्स त्रुटियों की रिपोर्ट करें
- एक पदानुक्रमित संरचना का निर्माण करते हैं, जिसे एक पेड़ के रूप में जाना जाता है
उदाहरण
कोई भी पहचानकर्ता / संख्या एक अभिव्यक्ति है
यदि x एक पहचानकर्ता है और y + 10 एक अभिव्यक्ति है, तो x = y + 10 एक कथन है।
निम्नलिखित उदाहरण के लिए पार्स ट्री पर विचार करें
(a+b)*c
पार्स ट्री में
- आंतरिक नोड: एक ऑपरेटर द्वारा दर्ज किया गया रिकॉर्ड और बच्चों के लिए दो फाइलें
- पत्ती: 2 / अधिक क्षेत्रों के साथ रिकॉर्ड; एक टोकन के लिए और दूसरा टोकन के बारे में जानकारी के लिए
- सुनिश्चित करें कि कार्यक्रम के घटक एक साथ सार्थक रूप से फिट होते हैं
- Gathers प्रकार की संगतता के लिए जानकारी और चेक टाइप करते हैं
- स्रोत भाषा द्वारा चेक ऑपरेंड की अनुमति है
चरण 3: शब्दार्थ विश्लेषण
सिमेंटिक विश्लेषण कोड की सिमेंटिक स्थिरता की जाँच करता है। यह प्रतीक तालिका के साथ पिछले चरण के वाक्यविन्यास वृक्ष का उपयोग करके यह सत्यापित करता है कि दिए गए स्रोत कोड शब्दार्थ के अनुरूप हैं। यह भी जांचता है कि कोड एक उपयुक्त अर्थ बता रहा है या नहीं।
सिमेंटिक एनालाइज़र टाइप मिसमैच, असंगत ऑपरेंड्स के लिए जाँच करेगा, एक फ़ंक्शन जिसे अनुचित तर्कों, एक अघोषित चर, आदि के साथ कहा जाता है।
सिमेंटिक विश्लेषण चरण के कार्य हैं:
- आपको एकत्रित जानकारी को संग्रह तालिका या सिंटैक्स ट्री में सहेजने में मदद करता है
- आपको टाइप जाँच करने की अनुमति देता है
- टाइप मिसमैच के मामले में, जहां कोई सटीक प्रकार के सुधार नियम नहीं हैं, जो वांछित संचालन को संतुष्ट करते हैं एक सिमेंटिक त्रुटि दिखाई जाती है
- प्रकार की जानकारी एकत्र करता है और टाइप संगतता के लिए जाँच करता है
- जाँचता है कि स्रोत भाषा ऑपरेंड की अनुमति देती है या नहीं
उदाहरण
float x = 20.2;float y = x*30;
उपरोक्त कोड में, सिमेंटिक विश्लेषक पूर्णांक से पहले 30.0 फ्लोट करने के लिए पूर्णांक 30 को टाइप करेगा
चरण 4: इंटरमीडिएट कोड जनरेशन
एक बार सिमेंटिक विश्लेषण चरण संकलक के ऊपर हो जाता है, लक्ष्य मशीन के लिए मध्यवर्ती कोड उत्पन्न करता है। यह कुछ अमूर्त मशीन के लिए एक कार्यक्रम का प्रतिनिधित्व करता है।
इंटरमीडिएट कोड उच्च-स्तरीय और मशीन स्तर की भाषा के बीच है। इस मध्यवर्ती कोड को इस तरह से उत्पन्न करने की आवश्यकता है जिससे इसे लक्ष्य मशीन कोड में अनुवाद करना आसान हो।
मध्यवर्ती कोड पीढ़ी पर कार्य:
- इसे स्रोत कार्यक्रम के शब्दार्थ निरूपण से उत्पन्न किया जाना चाहिए
- अनुवाद की प्रक्रिया के दौरान संकलित मूल्यों को धारण करता है
- मध्यवर्ती कोड को लक्ष्य भाषा में अनुवाद करने में आपकी सहायता करता है
- आपको स्रोत भाषा के पूर्ववर्ती क्रम को बनाए रखने की अनुमति देता है
- यह निर्देश के ऑपरेंड की सही संख्या रखता है
उदाहरण
उदाहरण के लिए,
total = count + rate * 5
पता कोड विधि की सहायता से मध्यवर्ती कोड है:
t1 := int_to_float(5)t2 := rate * t1t3 := count + t2total := t3
चरण 5: कोड अनुकूलन
अगला चरण कोड अनुकूलन या मध्यवर्ती कोड है। यह चरण अनावश्यक कोड लाइन को हटाता है और संसाधनों को बर्बाद किए बिना कार्यक्रम के निष्पादन में तेजी लाने के लिए बयानों के अनुक्रम की व्यवस्था करता है। इस चरण का मुख्य लक्ष्य मध्यवर्ती कोड पर सुधार करना है ताकि एक कोड उत्पन्न किया जा सके जो तेजी से चलता है और कम जगह घेरता है।
इस चरण के प्राथमिक कार्य हैं:
- यह आपको निष्पादन और संकलन की गति के बीच एक व्यापार बंद स्थापित करने में मदद करता है
- लक्ष्य कार्यक्रम के चलने के समय में सुधार करता है
- मध्यवर्ती प्रतिनिधित्व में अभी भी सुव्यवस्थित कोड उत्पन्न करता है
- अप्राप्य कोड को हटाने और अप्रयुक्त चर से छुटकारा
- उन बयानों को हटाना जो लूप से बदल नहीं रहे हैं
उदाहरण:
निम्नलिखित कोड पर विचार करें
a = intofloat(10)b = c * ad = e + bf = d
बन सकता है
b =c * 10.0f = e+b
चरण 6: कोड जनरेशन
कोड पीढ़ी एक संकलक का अंतिम और अंतिम चरण है। यह कोड अनुकूलन चरणों से इनपुट प्राप्त करता है और परिणामस्वरूप पृष्ठ कोड या ऑब्जेक्ट कोड का उत्पादन करता है। इस चरण का उद्देश्य भंडारण को आवंटित करना और रीकोसेबल मशीन कोड उत्पन्न करना है।
यह चर के लिए मेमोरी स्थान भी आवंटित करता है। मध्यवर्ती कोड में दिए गए निर्देश मशीन के निर्देशों में परिवर्तित हो जाते हैं। यह चरण लक्ष्य भाषा में अनुकूलन या मध्यवर्ती कोड को कवर करता है।
लक्ष्य भाषा मशीन कोड है। इसलिए, सभी स्मृति स्थानों और रजिस्टरों को भी इस चरण के दौरान चुना और आवंटित किया गया है। इस चरण द्वारा उत्पन्न कोड को इनपुट लेने और अपेक्षित आउटपुट उत्पन्न करने के लिए निष्पादित किया जाता है।
उदाहरण:
a = b + 60.0
संभवतः रजिस्टरों में अनुवाद किया जाएगा।
MOVF a, R1MULF #60.0, R2ADDF R1, R2
प्रतीक तालिका प्रबंधन
एक प्रतीक तालिका में पहचानकर्ता की विशेषताओं के लिए फ़ील्ड के साथ प्रत्येक पहचानकर्ता का रिकॉर्ड होता है। यह घटक कंपाइलर के लिए पहचानकर्ता रिकॉर्ड की खोज करना और इसे जल्दी से पुनर्प्राप्त करना आसान बनाता है। गुंजाइश प्रबंधन के लिए प्रतीक तालिका भी आपकी मदद करती है। प्रतीक तालिका और त्रुटि हैंडलर सभी चरणों और प्रतीक तालिका अद्यतन के साथ परस्पर क्रिया करता है।
रूटीन को संभालने में त्रुटि:
कंपाइलर डिज़ाइन प्रक्रिया में सभी नीचे दिए गए चरणों में त्रुटि हो सकती है:
- लेक्सिकल एनालाइजर: गलत तरीके से टोकन बजाया गया
- सिंटेक्स एनालाइज़र: गुम कोष्ठक
- इंटरमीडिएट कोड जनरेटर: एक ऑपरेटर के लिए बेमेल ऑपरेशंस
- कोड ऑप्टिमाइज़र: जब कथन उपलब्ध नहीं हो
- कोड जनरेटर: अगम्य कथन
- प्रतीक सारणी: कई घोषित पहचानकर्ताओं की त्रुटि
अधिकांश सामान्य त्रुटियां स्कैनिंग में अमान्य वर्ण अनुक्रम, प्रकार में अमान्य टोकन अनुक्रम, स्कोप त्रुटि, और शब्दार्थ विश्लेषण में पार्सिंग हैं।
त्रुटि उपरोक्त चरणों में से किसी में भी हो सकती है। त्रुटियों को खोजने के बाद, चरण को संकलन प्रक्रिया के साथ जारी रखने के लिए त्रुटियों से निपटने की आवश्यकता है। इन त्रुटियों को त्रुटि हैंडलर को रिपोर्ट करने की आवश्यकता होती है जो संकलन प्रक्रिया को करने के लिए त्रुटि को संभालती है। आम तौर पर, त्रुटियों को संदेश के रूप में सूचित किया जाता है।
सारांश
- कंपाइलर विभिन्न चरणों में संचालित होता है प्रत्येक चरण स्रोत कार्यक्रम को एक प्रतिनिधित्व से दूसरे में बदल देता है
- संकलक डिजाइन के छह चरण हैं 1) लेक्सिकल विश्लेषण 2) सिंटैक्स विश्लेषण 3) सिमेंटिक विश्लेषण 4) इंटरमीडिएट कोड जनरेटर 5) कोड अनुकूलक 6) कोड जनरेटर
- जब लेसर एनालिसिस पहला चरण होता है जब कंपाइलर सोर्स कोड को स्कैन करता है
- सिंटैक्स विश्लेषण पाठ में संरचना की खोज के बारे में है
- सिमेंटिक विश्लेषण कोड की सिमेंटिक स्थिरता की जाँच करता है
- एक बार सिमेंटिक विश्लेषण चरण संकलक के ऊपर हो जाता है, तो लक्ष्य मशीन के लिए मध्यवर्ती कोड उत्पन्न होता है
- कोड अनुकूलन चरण अनावश्यक कोड लाइन को हटाता है और बयानों के अनुक्रम को व्यवस्थित करता है
- कोड जनरेशन चरण कोड ऑप्टिमाइज़ेशन चरण से इनपुट प्राप्त करता है और परिणामस्वरूप पृष्ठ कोड या ऑब्जेक्ट कोड का उत्पादन करता है
- एक प्रतीक तालिका में पहचानकर्ता की विशेषताओं के लिए फ़ील्ड के साथ प्रत्येक पहचानकर्ता का रिकॉर्ड होता है
- नियमित संचालन में त्रुटि कई चरणों के दौरान त्रुटि और रिपोर्ट को संभालती है