कम्पाइलर क्या है? फायदे, नुकसान और प्रकार

206

What is Compiler in Hindi | कम्पाइलर क्या है हिंदी में

एक कंपाइलर एक विशेष प्रोग्राम है जो एक विशेष प्रोग्रामिंग लैंग्वेज में लिखे गए स्टेटमेंट्स को प्रोसेस करता है और उन्हें मशीनी लैंग्वेज या “कोड” में बदल देता है जिसका उपयोग कंप्यूटर का प्रोसेसर करता है।

आम तौर पर, एक प्रोग्रामर एक एडिटर का उपयोग करके एक समय में पास्कल या सी एक लाइन जैसी लैंग्वेज में लैंग्वेज स्टेटमेंट्स लिखता है। जो फाइल बनाई जाती है उसमें सोर्स स्टेटमेंट होता हैं। प्रोग्रामर तब उपयुक्त लैंग्वेज कम्पाइलर रन करता है, फ़ाइल का नाम निर्दिष्ट करता है जिसमें सोर्स स्‍टेटमेंट होते हैं।

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

- Advertisement -

परंपरागत रूप से, कंपाइलेशन के आउटपुट को ऑब्जेक्ट कोड या कभी-कभी ऑब्जेक्ट मॉड्यूल कहा जाता है। (ध्यान दें कि यहां “ऑब्जेक्ट” शब्द ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग से संबंधित नहीं है।) ऑब्जेक्ट कोड मशीन कोड है जिसे प्रोसेसर एक समय में एक इंस्ट्रक्शन एक्सेक्यूट कर सकता है।

What is Compiler in Hindi | कम्पाइलर क्या है हिंदी में

What is Compiler in Hindi - कम्पाइलर क्या है

एक कंपाइलर क्या है?

एक कंपाइलर एक प्रोग्राम है जो कुछ हाई लेवल प्रोग्रामिंग लैंग्वेज (जैसे जावा) में लिखे गए सोर्स प्रोग्राम को कुछ कंप्यूटर आर्किटेक्चर (जैसे इंटेल पेंटियम आर्किटेक्चर) के लिए मशीन कोड में ट्रांसलेटं करता है। जेनरेट किए गए मशीन कोड को बाद में हर बार अलग-अलग डेटा के खिलाफ कई बार एक्सेक्यूट किया जा सकता है।

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

ध्यान दें कि इंटरप्रेटर और कंपाइलर दोनों (किसी भी अन्य प्रोग्राम की तरह) कुछ हाई-लेवल प्रोग्रामिंग लैंग्वेज में लिखे गए हैं (जो उनके द्वारा स्वीकार की जाने वाली लैंग्वेज से भिन्न हो सकते हैं) और उनका मशीन कोड में ट्रांसलेटं किया जाता है। उदाहरण के लिए, एक जावा इंटरप्रेटर पूरी तरह से सी, या जावा में भी लिखा जा सकता है।

इंटरप्रेटर सोर्स प्रोग्राम मशीन इंडिपेंडेंट है क्योंकि यह मशीन कोड उत्पन्न नहीं करता है। (मशीन कोड में उत्पन्न और ट्रांसलेटं के बीच अंतर पर ध्यान दें।)

एक इंटरप्रेटर आमतौर पर एक कम्पाइलर की तुलना में धीमा होता है क्योंकि यह एक प्रोग्राम प्रोग्राम में प्रत्येक स्टेटमेंट्स को इस स्टेटमेंट्स के मूल्यांकन की संख्या के रूप में कई बार प्रोसेस और इंटरप्रेटस करता है।

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

कंपाइलर की विशेषताएं (Features of a Compiler in Hindi)

विशेषताएं इस प्रकार हैं:

  • कंपाइलेशन स्‍पीड।
  • मशीन कोड की शुद्धता।
  • कोड का अर्थ नहीं बदलना चाहिए।
  • मशीन कोड की स्‍पीड।
  • अच्छे एरर का पता लगाना।
  • व्याकरण के अनुसार कोड को सही ढंग से जांचना।
  • कंपाइलर्स के उपयोग/अनुप्रयोग
  • कोड को प्लेटफॉर्म के लिए इंडिपेंडेंट बनाने में मदद करता है।
  • कोड को सिंटैक्स और सिमेंटिक एरर से मुक्त बनाता है।
  • कोड की एक्सेक्यूटेबल फ़ाइलें बनाता हैं।
  • एक लैंग्वेज से दूसरी लैंग्वेज में कोड का ट्रांसलेटं करता है।

कम्पाइलर के लाभ (Advantages of Compiler in Hindi)

कंपाइलर के कई फायदे हैं जो इस प्रकार हैं –

  • एक कंपाइलर एक बार में एक कोड का ट्रांसलेटं करता है।
  • इसमें समय कम लगता है।
  • CPU उपयोग अधिक है।
  • Syntactic और Semantic दोनों एरर्स को समवर्ती रूप से जाँचा जा सकता है।
  • यह कई हाई-लेवल लैंग्वेजेज जैसे C, C++, JAVA, आदि द्वारा आसानी से सपोर्टेड है।

कंपाइलर के नुकसान (Disadvantages of Compiler in Hindi)

कंपाइलर के कई नुकसान हैं जो इस प्रकार हैं –

  • यह लचीला नहीं है।
  • यह अधिक जगह की खपत करता है।
  • एरर लोकलाइजेशन मुश्किल है।
  • सोर्स प्रोग्राम को प्रत्येक मॉडिफिकेशन के लिए कंपाइल्‍ड किया जाना है।
  • इसे सही मशीन कोड उत्पन्न करना चाहिए जो तेजी से चलना चाहिए।
  • यह पोर्टेबल होना चाहिए।
  • इसे नैदानिक ​​और एरर मैसेज देना चाहिए।
  • इसमें लगातार ऑप्टिमाइजेशन होना चाहिए।

कंप्यूटर में कंपाइलर क्या है? (What is a Compiler in a Computer)

What is Compiler in Hindi - कम्पाइलर क्या है

कंप्यूटर में एक कंपाइलर बस एक प्रोग्राम को उसकी सोर्स लैंग्वेज से टार्गेट लैंग्वेज में बदल देता है। किसी प्रोग्राम को उसकी सोर्स लैंग्वेज से टार्गेट लैंग्वेज में परिवर्तित करते समय यह सोर्स प्रोग्राम का अर्थ नहीं बदलता है और सोर्स और टार्गेट प्रोग्राम दोनों समान होते हैं।

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

हालाँकि, सोर्स लैंग्वेजेज और टार्गेट लैंग्वेजेज की एक विस्तृत विविधता है। सोर्स लैंग्वेज पारंपरिक प्रोग्रामिंग लैंग्वेजेज जैसे जावा, सी #, पर्ल, विजुअल बेसिक से लेकर कुछ विशेष लैंग्वेजेज तक है जो कंप्यूटर एप्लिकेशन के लगभग हर क्षेत्र जैसे रूबी, पायथन में विकसित हुई हैं।

टार्गेट लैंग्वेज एक प्रोग्रामिंग लैंग्वेज भी हो सकती है या यह एक निश्चित कंप्यूटर की मशीनी लैंग्वेज हो सकती है जो माइक्रोप्रोसेसर और सुपर कंप्यूटर के बीच होती है।

कंपाइलर की संरचना या उसके उद्देश्य के आधार पर हम कंपाइलर्स को सिंगल-पास, टू-पास और मल्टी-पास के रूप में वर्गीकृत कर सकते हैं, हम आगे के सेक्शन में इन प्रकारों पर चर्चा करेंगे।

एक कंपाइलर के चरण (Phases of a Compiler in Hindi)

कंप्यूटर में कंपाइलर सिर्फ एक सोर्स प्रोग्राम को इंटेक नहीं करता है और सीधे एक समान टारगेट प्रोग्राम जेनरेट करता है। इसके बजाय, यह चरणों में संचालित होता है। प्रत्येक चरण में, कम्पाइलर एक टारगेट प्रोग्राम बनाने की प्रक्रिया में सोर्स प्रोग्राम को विघटित करता है।

What is Compiler in Hindi - कम्पाइलर क्या है

1. Lexical Analysis

सोर्स प्रोग्राम के एनालिसिस में lexical analysis प्रारंभिक चरण है। Lexical एनालिसिस को लिनियर एनालिसिस भी कहा जाता है। ऐसा इसलिए है क्योंकि सोर्स प्रोग्राम वर्णों की एक धारा से बना है। कैरेक्‍टर की इन स्ट्रिम को कैरेक्‍टर द्वारा बाएं से दाएं पढ़ा जाता है। कुछ अर्थ रखने वाले वर्णों के अनुक्रम को टोकन में बांटा गया है।

2. Syntax Analysis

Syntax Analysis चरण को hierarchical एनालिसिस या पार्सिंग के रूप में भी जाना जाता है। इस चरण में, लिनियर एनालिसिस चरण के दौरान बने टोकन को grammatical phrases में समूहीकृत किया जाता है जिसे parse tree’ की मदद से दर्शाया जाता है।

तो, ऊपर के उदाहरण में बने टोकन को व्याकरणिक वाक्यांशों में बांटा गया है।

3. Semantics Analysis

उपरोक्त दो चरणों में, हमने सोर्स प्रोग्राम को टोकन में विभाजित किया है और उन्हें पदानुक्रम में व्यवस्थित किया है जैसा कि ऊपर के पार्स ट्री में दर्शाया गया है। सिमेंटिक एनालिसिस में, प्रोग्राम के घटकों पर कुछ जाँच की जाती है ताकि यह पता लगाया जा सके कि ये घटक सामूहिक रूप से अर्थ बनाते हैं या नहीं।

सिमेंटिक एनालिसिस का सबसे महत्वपूर्ण कारक ‘टाइप चेकिंग’ है। कम्पाइलर सुनिश्चित करता है कि प्रत्येक ऑपरेटर के लिए सोर्स लैंग्वेज द्वारा अनुमत ऑपरेंड हैं।

4. Symbol Table Management

एक प्रोग्राम में सभी संस्थाओं के रिकॉर्ड को बनाए रखने के लिए कंपाइलर एक डेटा संरचना बनाता है और बनाए रखता है जिसे हम एक सिंबल  टेबल के रूप में संदर्भित करते हैं।

प्रोग्राम के भाग हो सकते हैं:

  • पहचानकर्ता
  • प्रोग्राम में फंक्‍शन
  • फंक्‍शन में आर्गुमेंट की संख्या
  • आर्गुमेंट पारित करने की मेथड
  • आर्गुमेंट का प्रकार जो फ़ंक्शन द्वारा लौटाया जाएगा (यदि कोई हो)।

सिंबल टेबल प्रोग्राम में मौजूद प्रत्येक इकाई के स्थान को आसानी से और जल्दी से निर्धारित करने में मदद करती है।

5. Error Detection and Reporting

जैसे ही सोर्स प्रोग्राम कंपाइलर के चरणों से गुजरता है, कई एरर सामने आएंगी। अधिकांश एरर कम्पाइलर के सिंटैक्स और सिमेंटिक चरण के दौरान सामने आती हैं।

एरर डिटेक्शन एंड रिपोर्टिंग चरण में एरर का पता चलता है और कंपाइलर को आगे बढ़ता हैं और सोर्स प्रोग्राम में आगे के एरर का पता लगाता हैं।

6. Intermediate Code Generation

इंटरमीडिएट कोड जनरेशन

एक बार जब सोर्स कोड का Syntactically और Semantically एनालिसिस किया जाता है, तो अगला चरण सोर्स प्रोग्राम का इंटरमीडिएट कोड उत्पन्न करना होता है। इंटरमीडिएट कोड एक अमूर्त मशीन के लिए एक प्रोग्राम की तरह है।

इंटरमीडिएट कोड में कई गुण हैं जैसा कि नीचे चर्चा की गई है:

  • इसे उत्पन्न करना आसान होना चाहिए।
  • इसे टारगेट कोड में ट्रांसलेटं करना आसान होना चाहिए।
  • इंटरमीडिएट कोड के प्रत्येक इंस्ट्रक्शन में असाइनमेंट ऑपरेटर के अलावा अधिक से अधिक एक ऑपरेटर होना चाहिए। यह कम्पाइलर को उस क्रम को निर्धारित करने में मदद करता है जिसमें ऑपरेशन एक्सेक्यूट किया जाना चाहिए।
  • कंपाइलर को प्रत्येक इंस्ट्रक्शन पर गणना किए गए इंटरमीडिएट वैल्‍यूज को संग्रहीत करने के लिए अस्थायी वेरिएबल उत्पन्न करना होता है।
  • इंटरमीडिएट कोड में कुछ इंस्ट्रक्शन हो सकते हैं जिनमें तीन से कम ऑपरेंड होते हैं।

इस प्रकार, इंटरमीडिएट कोड पीढ़ी चरण सोर्स प्रोग्राम के इंटरमीडिएट प्रतिनिधित्व का उत्पादन करता है, प्रोग्राम के प्रवाह को संभालता है और प्रक्रिया कॉल को भी संभालता है।

7. Code Optimization

कोड ऑप्टिमाइजेशन चरण में, टारगेट कोड के निष्पादन को और भी तेज करने के लिए इंटरमीडिएट कोड को ऑप्टिमाइज किया जाता है। ऑप्टिमाइजेशन के दौरान, प्रोग्राम का अर्थ नहीं बदलता है। यद्यपि ऑप्टिमाइज किए गए कोड की मात्रा कंपाइलर से कंपाइलर में भिन्न होती है।

8. Code Generation

कोड जनरेशन चरण कंपाइलेशन का अंतिम चरण है। इस चरण में, एक स्थानांतरित करने योग्य मशीन कोड या एक असेंबली कोड उत्पन्न होता है जो सोर्स प्रोग्राम के बराबर होता है।

कोड जनरेशन चरण का सबसे महत्वपूर्ण हिस्सा मेमोरी लोकेशन यानी रजिस्टरों का चयन करना है क्योंकि हमें उन्हें वेरिएबल असाइन करने की आवश्यकता होती है जो हम प्रोग्राम में उपयोग करते हैं।

कंपाइलर के प्रकार (Types of Compiler in Hindi)

यद्यपि कंप्यूटर में विभिन्न प्रकार के कंपाइलर होते हैं, हम इस संदर्भ में तीन प्रकार के कंपाइलरों पर चर्चा करेंगे।

1. सिंगल-पास कंपाइलर

जैसा कि हम सभी जानते हैं कि एक कंपाइलर के छह चरण होते हैं लेक्सिकल एनालिसिस फेज, सिंटैक्स एनालिसिस, सिमेंटिक एनालिसिस, इंटरमीडिएट कोड जनरेशन फेज, कोड ऑप्टिमाइजेशन और कोड जेनरेशन फेज। इसलिए, यदि इन सभी चरणों को एक सिंगल मॉड्यूल में लागू किया जाता है तो हम इसे सिंगल-पास कंपाइलर के रूप में संदर्भित करते हैं।

सिंगल-पास मुख्य मेमोरी की तरह अधिक स्थान लेता है क्योंकि इसके सभी चरण एक ही मॉड्यूल में कार्यान्वित किए जाते हैं।

चूंकि सभी चरणों को एक मॉड्यूल में कार्यान्वित किया जाता है, इसलिए सिंगल-पास कंपाइलर तेजी से कंपाइल होता है क्योंकि इसमें इंटरमीडिएट कोड उत्पन्न करने की आवश्यकता नहीं होती है।

उदाहरण: पास्कल कंपाइलर

2. टू-पास कंपाइलर

टू-पास कंपाइलर में, कंपाइलर के छह चरणों को दो मॉड्यूल में लागू किया जाता है।

एक समय में टू-पास कंपाइलर का केवल एक मॉड्यूल मुख्य मेमोरी में रखा जाता है और इस मॉड्यूल (प्रथम मॉड्यूल) के माध्यम से सोर्स प्रोग्राम को प्रोसेस किया जाता है।

पहले मॉड्यूल द्वारा उत्पन्न इंटरमीडिएट कोड संग्रहीत किया जाता है और पहले मॉड्यूल को मुख्य मेमोरी में कंपाइलर के बाद के दूसरे मॉड्यूल द्वारा प्रतिस्थापित किया जाता है।

अब पहले मॉड्यूल द्वारा उत्पन्न इंटरमीडिएट कोड दूसरे मॉड्यूल के इनपुट के रूप में प्रदान किया जाता है जो बदले में टारगेट प्रोग्राम उत्पन्न करता है।

तो, इस प्रकार टारगेट कोड दो पास में उत्पन्न होता है, इसीलिए इसे टू-पास कंपाइलर कहा जाता है।

3. मल्टी-पास कंपाइलर

मल्टी-पास कंपाइलर में, कंपाइलर के चरणों को कई मॉड्यूल के साथ लागू किया जाता है।

एक समय में केवल एक मॉड्यूल को मुख्य मेमोरी में रखा जाता है और उस मॉड्यूल द्वारा उत्पन्न इंटरमीडिएट कोड संग्रहीत किया जाता है और फिर मॉड्यूल को उसके बाद के मॉड्यूल से बदल दिया जाता है।

पिछले मॉड्यूल द्वारा उत्पन्न मध्यवर्ती कोड बाद के मॉड्यूल के इनपुट के रूप में प्रदान किया जाता है।

यह प्रक्रिया तब तक चलती है जब तक टारगेट प्रोग्राम तैयार नहीं हो जाता।

मल्टी-पास कंपाइलर सिंगल-पास की तुलना में धीमा है लेकिन यह मुख्य मेमोरी में कम जगह लेता है क्योंकि इसका केवल एक मॉड्यूल एक समय में मुख्य मेमोरी में रखा जाता है।

उदाहरण: जावा कंपाइलर

कंपाइलर पर अक्सर पूछे जाने वाले प्रश्न

Q. एक कंपाइलर क्या है?

A. यह सॉफ्टवेयर है जो सोर्स कोड को मशीन कोड में बदलता है। प्रक्रिया को कंपाइलेशन कहा जाता है।

Q. एक सिंबल तालिका क्या है?

A. यह आसानी से पहचानकर्ताओं के नाम खोजने में मदद करता है। इसमें पहचानकर्ता और उनके प्रकार होते हैं।

Q. कंपाइलर और इंटरप्रेटर में क्या अंतर है?

A. कंपाइलर कोड को पूरी तरह से जांचता है, जबकि इंटरप्रेटर इसे लाइन से लाइन चेक करता है।

Q. एक decompiler क्या है?

A. यह मशीन कोड को सोर्स कोड में बदल देता है। यह कंपाइलर का उल्टा

इंटरप्रेटर क्या हैं? कम्पाइलर बनाम इंटरप्रेटर

LEAVE A REPLY

Please enter your comment!
Please enter your name here

This site uses Akismet to reduce spam. Learn how your comment data is processed.