कंपाइलर - Compiler का क्या मतलब है?

कंपाइलर एक सॉफ्टवेयर प्रोग्राम है जो प्रारंभिक क्रमादेशित कोड को हार्डवेयर की "नंगे धातु" के करीब एक अधिक बुनियादी मशीन भाषा में बदलने के लिए जिम्मेदार है, और कंप्यूटर द्वारा ही अधिक पठनीय है। एक उच्च-स्तरीय स्रोत कोड जो एक उच्च-स्तरीय प्रोग्रामिंग भाषा में एक डेवलपर द्वारा लिखा जाता है, संकलक द्वारा "सुपाच्य" परिणाम बनाने के लिए, संकलक द्वारा निम्न-स्तरीय ऑब्जेक्ट कोड में अनुवादित किया जाता है।

औपचारिक रूप से, संकलन के आउटपुट को ऑब्जेक्ट कोड या कभी-कभी ऑब्जेक्ट मॉड्यूल कहा जाता है। ऑब्जेक्ट कोड मशीन कोड है जो प्रोसेसर एक समय में एक निर्देश कर सकता है।

कंपाइलर्स की आवश्यकता होती है क्योंकि एक पारंपरिक प्रोसेसर ऑब्जेक्ट कोड को निष्पादित करता है। कंप्यूटर के अंकगणितीय तर्क इकाई को काम करने के लिए प्रोसेसर एक सर्किट बोर्ड पर रूट सिग्नल के लिए लॉजिक गेट्स का उपयोग करता है, बाइनरी हाई और लो सिग्नल में हेरफेर करता है। लेकिन ऐसा नहीं है कि एक मानव प्रोग्रामर कोड कैसे बनाता है: इस बुनियादी, बाइनरी मशीन भाषा के विपरीत, प्रारंभिक उच्च-स्तरीय कोड में चर, कमांड, फ़ंक्शन, कॉल, विधियाँ और अन्य मिश्रित फिक्स्चर होते हैं जो अंकगणित और लेक्सिकल सिंटैक्स के मिश्रण में दर्शाए जाते हैं। उन सभी को एक ऐसे रूप में रखने की जरूरत है जिसे कंप्यूटर प्रोग्राम को निष्पादित करने के लिए समझ सके।

एक कंपाइलर चार प्रमुख चरणों को क्रियान्वित करता है:

  1. स्कैन करना: स्कैनर सोर्स कोड से एक बार में एक अक्षर पढ़ता है और ट्रैक करता है कि कौन सा वर्ण किस पंक्ति में मौजूद है।
  2. लेक्सिकल एनालिसिस: कंपाइलर वर्णों के अनुक्रम को परिवर्तित करता है जो स्रोत कोड में वर्णों के स्ट्रिंग्स (जिसे टोकन के रूप में जाना जाता है) की एक श्रृंखला में दिखाई देता है, जो एक लेक्सिकल एनालाइज़र नामक प्रोग्राम द्वारा एक विशिष्ट नियम से जुड़े होते हैं। एक प्रतीक तालिका का उपयोग लेक्सिकल एनालाइज़र द्वारा स्रोत कोड में शब्दों को संग्रहीत करने के लिए किया जाता है जो उत्पन्न टोकन के अनुरूप होता है।
  3. सिंटैक्टिक एनालिसिस: इस चरण में, सिंटैक्स विश्लेषण किया जाता है, जिसमें यह निर्धारित करने के लिए प्रीप्रोसेसिंग शामिल है कि लेक्सिकल विश्लेषण के दौरान बनाए गए टोकन उनके उपयोग के अनुसार उचित क्रम में हैं या नहीं। कीवर्ड के एक सेट का सही क्रम, जो वांछित परिणाम दे सकता है, सिंटैक्स कहलाता है। सिंटैक्टिक सटीकता सुनिश्चित करने के लिए कंपाइलर को स्रोत कोड की जांच करनी होगी।
  4. शब्दार्थ विश्लेषण: इस चरण में कई मध्यवर्ती चरण होते हैं। सबसे पहले, दिए गए भाषा में व्याकरण के संबंध में उनके क्रम के साथ, टोकन की संरचना की जाँच की जाती है। टोकन संरचना का अर्थ पार्सर और विश्लेषक द्वारा अंततः एक मध्यवर्ती कोड उत्पन्न करने के लिए व्याख्या किया जाता है, जिसे ऑब्जेक्ट कोड कहा जाता है।

ऑब्जेक्ट कोड में ऐसे निर्देश शामिल होते हैं जो प्रोग्राम में आने पर संबंधित टोकन के लिए प्रोसेसर क्रिया का प्रतिनिधित्व करते हैं। अंत में, संपूर्ण कोड को पार्स किया जाता है और यह जांचने के लिए व्याख्या की जाती है कि क्या कोई अनुकूलन संभव है। एक बार अनुकूलन किया जा सकता है, अंतिम ऑब्जेक्ट कोड उत्पन्न करने के लिए उपयुक्त संशोधित टोकन ऑब्जेक्ट कोड में डाले जाते हैं, जो फ़ाइल के अंदर सहेजा जाता है।

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

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

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

पारंपरिक संकलक के साथ, निष्पादन से पहले कोड को एक बार संकलित किया जाता है।

इसके विपरीत, एक दुभाषिया मांग पर प्रत्येक निष्पादन के लिए कोड को एक साथ रखेगा।

स्पष्टीकरण का वह हिस्सा स्पष्ट है। यह कम स्पष्ट हो जाता है कि यह वास्तव में कैसे होता है, और कौन सी भाषाएँ संकलित भाषा हैं और किनकी व्याख्या की जाती है। उदाहरण के लिए, C++ को अक्सर एक ऐसी भाषा के प्रमुख उदाहरण के रूप में रखा जाता है जो एक कंपाइलर का उपयोग करती है, हालांकि C++ इंटरप्रेटर के रूप में CINT की उपस्थिति उस मामले को थोड़ा और सूक्ष्म बनाती है।

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

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

 

Post a Comment

0 Comments