Introduction of Compiler Design : आइए जानते है

Introduction of Compiler Design : आइए जानते है

कंपाइलर डिज़ाइन का परिचय:

कंपाइलर एक सॉफ़्टवेयर होता है जो एक हाई-लेवल भाषा में लिखे गए प्रोग्राम को एक लो-लेवल भाषा में (ऑब्जेक्ट/लक्ष्य/मशीन भाषा/0, 1 के) रूप में परिवर्तित करता है।

एक अनुवादक या भाषा प्रोसेसर एक प्रोग्राम होता है जो किसी प्रोग्रामिंग भाषा में लिखी गई इनपुट प्रोग्राम को किसी अन्य भाषा में समरूप प्रोग्राम में अनुवादित करता है। कंपाइलर एक प्रकार का अनुवादक होता है, जो एक हाई-लेवल प्रोग्रामिंग भाषा में लिखे गए प्रोग्राम को इनपुट के रूप में लेता है और इसे मशीन भाषा या असेम्बली भाषा जैसी लो-लेवल भाषाओं में समरूप प्रोग्राम में अनुवादित करता है।

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

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

High-Level Programming Language

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

Low-Level Programming Language

एक निम्न स्तरीय प्रोग्रामिंग भाषा एक भाषा है जो प्रोग्रामिंग की विचारों और अवधारणाओं की आवश्यकता नहीं होती।

कंपाइलर डिज़ाइन की चरणों के बारे में अध्ययन

Lexical Analysis:

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

Syntax Analysis:

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

Semantic Analysis:

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

Code Generation:

कंपाइलर डिज़ाइन का चौथा चरण कोड जनरेशन है। इस चरण में, कंपाइलर पार्स ट्री को मशीन कोड में अनुवादित करता है जो कंप्यूटर द्वारा निष्पादित किया जा सकता है। कंपाइलर द्वारा उत्पन्न कोड को लक्षित प्लेटफ़ॉर्म के लिए कुशल और अनुकूलित किया जाना चाहिए।

Optimization:

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

समग्र रूप से, कंपाइलर डिज़ाइन एक जटिल प्रक्रिया है जो कई चरणों को शामिल करती है और प्रोग्रामिंग भाषा और लक्षित प्लेटफ़ॉर्म के गहरे ज्ञान की आवश्यकता होती है। एक अच्छी डिज़ाइन वाले कंपाइलर से सॉफ़्टवेयर प्रोग्राम की क्षमता और प्रदर्शन को बढ़ाया जा सकता है, जिससे उपयोगकर्ताओं के लिए वे और उपयोगी और मूल्यवान बन सकते हैं।
compiler

Cross Compiler

यह मशीन 'A' पर चलने वाली और एक दूसरी मशीन 'B' के लिए कोड उत्पन्न करती है। यह कंपाइलर उस प्लेटफ़ॉर्म के लिए कोड बना सकता है जो कंपाइलर का उपयोग कर रहा है, और इसके अलावा भी किसी अन्य प्लेटफ़ॉर्म के लिए कोड बना सकता है।

Source-to-source Compiler

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

Language Processing Systems

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

 

High-Level Language:

अगर कोई प्रोग्राम #include या #define जैसे पूर्व-प्रोसेसर निर्देशक होते हैं तो उसे उच्च स्तरीय भाषा कहा जाता है। ये मानवों के बहुत करीब होते हैं लेकिन मशीनों से बहुत दूर। इन (#) टैग को पूर्व-प्रोसेसर निर्देशिका कहा जाता है। ये पूर्व-प्रोसेसर को यह निर्देश देते हैं कि क्या करना है।

Pre-Processor:

पूर्व-प्रोसेसर सभी #include निर्देशिकाओं को हटा देता है जिसे फ़ाइल समावेश कहा जाता है और सभी #define निर्देशिकाओं का मैक्रो विस्तार का उपयोग करके करता है। इसमें फ़ाइल समावेश, वृद्धि, मैक्रो प्रोसेसिंग आदि की कार्यप्रणाली होती है।

Assembly Language:

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

Assembler:

हर प्लेटफ़ॉर्म (हार्डवेयर + ओएस) के लिए हमें एक असेम्बलर होता है। वे सामान्यत: सामान्य नहीं होते क्योंकि हर प्लेटफ़ॉर्म के लिए हमें एक होता है। असेम्बलर का उत्पाद एक ऑब्जेक्ट फ़ाइल कहलाता है। इसका उपयोग असेम्बली भाषा को मशीन कोड में अनुवादित करने के लिए किया जाता है।

Interpreter:

एक अनुवादक उच्च स्तरीय भाषा को कम स्तरीय मशीन भाषा में बदलता है, जिस प्रकार कि एक कंपाइलर करता है। लेकिन वे उन तरीकों में अलग हैं जिनसे वे इनपुट को पढ़ते हैं। एक कंपाइलर एक ही समय में पूरी दिशा ता को पढ़ता है, प्रसंस्करण करता है, और स्रोत कोड को क्रियान्वित करता है जबकि अनुवादक एक ही पंक्ति के अनुसार ऐसा करता है। एक कंपाइलर पूरी प्रोग्राम को स्कैन करता है और इसे मशीन कोड में पूरी तरह से अनुवादित करता है जबकि एक अनुवादक एक ही स्टेटमेंट कोड को एक समय में अनुवादित करता है। अनुवादित प्रोग्राम सामान्यतः कंपाइल किए गए प्रोग्रामों की तुलना में धीमे होते हैं। उदाहरण के लिए: स्रोत प्रोग्राम में, अगर #include “Stdio. h” लिखा है। प्री-प्रोसेसर उत्पन्न आउटपुट में इस फ़ाइल को उसके सामग्री के साथ बदल देता है। लिंकर का मूल काम अद्यतन किए गए ऑब्जेक्ट कोड को मिलाना होता है (जो अभी तक जुड़ा नहीं है), जो कंपाइलर, असेम्बलर, मानक पुस्तकालय कार्य, और ऑपरेटिंग सिस्टम संसाधनों द्वारा उत्पन्न किए गए होते हैं। कंपाइलर, असेम्बलर, और लिंकर द्वारा उत्पन्न कोड सामान्यत: अपनी प्राकृतिकता के कारण पुनः स्थानांतरित होते हैं, जिसका अर्थ है, इन कोडों की शुरुआती स्थान निर्धारित नहीं होती है, जिसका अर्थ है कि वे कंप्यूटर मेमोरी के किसी भी स्थान पर हो सकते हैं, इसलिए लोडरों का मूल काम इन मेमोरी स्थानों का सटीक पता लगाना / गणना होता है।

Relocatable Machine Code:

यह किसी भी बिंदु पर लोड किया जा सकता है और चलाया जा सकता है। प्रोग्राम के भीतर का पता इस प्रकार होगा कि यह प्रोग्राम के चलने के साथ सहायक हो।

Loader/Linker:

लोडर/लिंकर पुनर्थानयनीय कोड को स्थायी कोड में परिवर्तित करता है और प्रोग्राम को चलाने का प्रयास करता है, जिससे एक चल रहा प्रोग्राम या एक त्रुटि संदेश (या कभी-कभी दोनों) उत्पन्न हो सकता है। लिंकर विभिन्न ऑब्जेक्ट फ़ाइलों को एक संयुक्त फ़ाइल में लोड करता है ताकि इसे कार्यक्षम बनाया जा सके। फिर लोडर इसे मेमोरी में लोड करता है और इसे क्रमांकित करता है।

Types of Compiler

मुख्यत: तीन प्रकार के कंपाइलर होते हैं।

  • Single Pass Compilers
  • Two Pass Compilers
  • Multipass Compilers
Single Pass Compiler

जब कंपाइलर के सभी चरण एक ही मॉड्यूल में मौजूद होते हैं, तो उसे सीधा एक पास कंपाइलर कहा जाता है। यह स्रोत कोड को मशीन कोड में रूपांतरित करने का काम करता है।

Two Pass Compiler

टू-पास कंपाइलर एक कंपाइलर है जिसमें प्रोग्राम को दो बार अनुवादित किया जाता है, पहली बार से सामने की ओर और दूसरी बार पिछले भाग से, जिसे दो पास कंपाइलर के रूप में जाना जाता है।

Multipass Compilers

जब किसी प्रोग्राम में कई इंटरमीडिएट कोड बनाए जाते हैं और एक सिंटैक्स ट्री को कई बार प्रोसेस किया जाता है, तो इसे मल्टीपास कंपाइलर कहा जाता है। यह कोड को छोटे प्रोग्रामों में बाँट देता है।

Phases of a Compiler

कॉम्पाइलेशन के दो मुख्य चरण होते हैं, जो फिर बहुत से भागों में विभाजित होते हैं। हर एक चरण पिछले स्तर के आउटपुट से इनपुट लेता है और संगठित तरीके से काम करता है।
compiler

Analysis Phase

दिए गए स्रोत कोड से एक इंटरमीडिएट प्रतिनिधित्व बनाया जाता है।

  • Lexical Analyzer
  • Syntax Analyzer
  • Semantic Analyzer
  • Intermediate Code Generator

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

Synthesis Phase

एक समकक्ष लक्ष्य कार्यक्रम को इंटरमीडिएट प्रतिनिधित्व से बनाया जाता है। इसके दो भाग होते हैं:

  • Code Optimizer
  • Code Generator

कोड ऑप्टिमाइज़र अंशदर्शी कोड को अनुकूलित करता है, और अंतिम कोड जेनरेटर अंशदर्शी इंटरमीडिएट कोड को विशिष्ट मशीन निर्देशिकाओं में अनुवादित करता है।

Operations of Compiler

ये कुछ कार्य हैं जो कंपाइलर द्वारा किए जाते हैं।

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

Advantages of Compiler Design

Efficiency:

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

Portability:

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

Error Checking:

कॉम्पाइलर कार्यक्रम के संकलन प्रक्रिया के दौरान व्यापक त्रुटि जाँच करते हैं, जिससे कोड में वाक्यात्मक, अर्थात्मक और तार्किक त्रुटियों को उसे चलाया जाने से पहले पकड़ा जा सकता है।

Optimizations:

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

Disadvantages of Compiler Design

Longer Development Time:

कॉम्पाइलर विकसित करना एक जटिल और समय-ग्राहक प्रक्रिया है जो उच्च स्तरीय भाषा और लक्षित हार्डवेयर प्लेटफ़ॉर्म के गहरे ज्ञान की आवश्यकता होती है।

Debugging Difficulties:

कॉम्पाइल किया गया कोड डिबग करना डिबग किए जाने वाले कोड को डिबग करने से कठिन हो सकता है क्योंकि उत्पन्न मशीन कोड को पढ़ना या समझना आसान नहीं हो सकता।

Lack of Interactivity:

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

Platform-Specific Code:

यदि कॉम्पाइलर का डिज़ाइन ऐसा हो कि वह किसी विशिष्ट हार्डवेयर प्लेटफ़ॉर्म के लिए मशीन कोड उत्पन्न करे, तो प्राप्त होने वाला कोड अन्य प्लेटफ़ॉर्मों के लिए पोर्टेबल नहीं हो सकता।

कमेंट्स

Disclaimer :

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

यदि आप हमारी वेबसाइट के बारे में कोई प्रश्न पूछना चाहते हैं, तो कृपया बेझिझक हमसे Contact Us Page के माध्यम से संपर्क करें।