Compiler क्या है आप नहीं जानते हैं या आपको सही जानकारी अभी तक नहीं मिल पाया होगा इसीलिए आप इस लेख पर हैं तो दोस्तों मैं आपको निराश नहीं करूंगा – मैं चाहता हूं कि रीडर्स को कंप्लीट जानकारी मिले हमारे इस वेबसाइट का मकसद ही यही है कि जानकारी को कंप्लीट करा जाए|
क्योंकि आधी अधूरी जानकारी सही नहीं होती है एक बार मेरे लेख को पढ़ लेने के बाद आपको किसी दूसरे लेख में जाने की आवश्यकता नहीं पड़नी चाहिए –ऐसा मेरा सोचना है क्योंकि समय बहुत कीमती है ओर उसे हमे संभाल कर खर्च करना चाहिए |
आप किसी भी बैकग्राउंड से बिलॉन्ग करते हो चाहे वह टेक्निकल हो चाहे नॉन टेक |वर्तमान समय में सभी जगह पर या हर कोई इसे उपयोग कर सकता है क्योकि आप प्रोग्रामिंग कर रहे हैं तो आपको कंपाइलिंग क्या करता है इसे जानना आपके लिए जरूरी है|
आसान भाषा में समझे तो कंपाइलर प्रोग्राम लेंग्वेज को प्रोसेसर के लेंग्वेज में कन्वर्ट करता है चलिए समझने का प्रयास करते हैं कि कंपाइलर क्या है ? और इसके कार्यों के बारे में भी जानने का प्रयास करेंगे और यह कितने प्रकार का होता है |
कंपाइलर क्या है?What Is Compiler ?
कंप्यूटर की दुनिया में कंपाइलर एक प्रोग्रामिंग सॉफ्टवेयर है जो high level language (c++, java, python) मैं लिखे गए सोर्स कोड को मशीनी भाषा में ट्रांसलेट कर देता है या कंपाइल करता है
या
कंपाइलर (Compiler) एक सॉफ्टवेयर टूल है जो उच्च स्तरीय प्रोग्रामिंग भाषा में लिखे गए स्रोत कोड को मशीन कोड या मध्यवर्ती कोड में अनुवादित करता है। यह मानव-पठनीय कोड को कंप्यूटर द्वारा समझने योग्य प्रारूप में परिवर्तित करके प्रोग्राम निष्पादन की सुविधा प्रदान करता है।
अब इसकी क्या आवस्यकता हो सकता है तो प्रोग्रामिंग लैंग्वेज कंप्यूटर को समझता नहीं है उसे तो सिर्फ मशीन कोड या असेंबली कोड ही समझता है तो कंपाइलर उस हाई लेवल लैंग्वेज को मशीन कोड में कन्वर्ट करता है जिसे कंप्यूटर द्वारा समझा जा सकता है
आमतौर पर एक प्रोग्रामर एक editor का उपयोग करके एक समय में पासकल या c one line जैसी भाषा में कथन लिखता है और इससे जो फाइल बनाई जाती है उसे सोर्स स्टेटमेंट कहते हैं प्रोग्रामर उपयुक्त भाषा संकलन को चलाता है और उस फ़ाइल का नाम निर्दिष्ट करता है जिसमे सोर्स स्टेटमेंट होते हैं
कुछ Compiler उच्च स्तरीय भाषा को मध्यवर्ती असेंबली भाषा में अनुवादित करता है जिसके बाद में असेंबली प्रोग्राम या असेंबलर द्वारा मशीन कोड में अनुवादित कर दिया जाता है तथा कुछ कंपाइलर सीधे मशीनी भाषा उत्पन्न करते हैं
कंपाइलेशन आमतौर पर उन प्रोग्रामों के लिए उपयोग किया जाता है जो एक निष्पादन योग्य प्रोग्राम बनाने के लिए सोर्स कोड को उच्च स्तरीय प्रोग्रामिंग भाषा (C++) से निम्न स्तरीय प्रोग्रामिंग भाषा जैसे मशीन कोड में अनुवादित करते हैं |
इसी तरह जब एक निम्न स्तरीय भाषा को कुछ स्तरीय भाषा में परिवर्तित किया जाता है तो इस प्रक्रिया को विघटन कहा जाता है या डीकंपाइलेशन कहा जाता है |
कंपाइलर क्लोजर
जावा स्क्रिप्ट को डाउनलोड करने और तेजी से चलाने के लिए एक उपकरण का उपयोग किया जाता है जिसे कंपाइलर Compiler क्लोजर कहते हैं यह कंपाइलर क्लोजर सोर्स लैंग्वेज से मशीन कोड में कंपाइल करने के बजाए यह जावा स्क्रिप्ट से बेहतर कंपाइल करता है |
यह आपकी जवास्क्रिप्ट को पार्स करता है इसका विश्लेषण करता है और डेड कोड को हटाता है और फिर जो कुछ बच जाता है उसे फिर से लिखता भी है ओर उसे छोटा भी करता है |
कंपाइलर क्लोजर के लाभ
दक्षता
कंपाइलर(Compiler) क्लोजर आपकी जावास्क्रिप्ट फाइलों के आकार को कम करता है और उन्हें अधिक कुशल बनाता है जिससे आपके रिप्लिकेशन को तेजी से लोड करने और आपकी बैंडविथ जरूरतों को कम कर रहे में मदद मिलती है |
चेकिंग कोड
Compilerक्लोजर अवैध जावास्क्रिप्ट के लिए चेतावनी या और संभावित खतरनाक संचालन के लिए चेतावनीया प्रदान करता है |
संकलन प्रक्रिया
preprocessor
प्री प्रोसेसर को Compiler का एक हिस्सा माना जाता है यह एक उपकरण है जो कंपाइलर के लिए इनपुट उत्पन्न करता है यह माइक्रो प्रोसेसिंग वृद्धि भाषा विस्तार आदि से संबंधित है |
कंपाइलर(Compiler)
हाई लेवल लैंग्वेज से लो लेवल लैंग्वेज में कन्वर्ट करता है
assembler
असेंबली भाषा कोड को मशीन भाषा में समझने योग्य अनुवाद करता है असेंबलर के आउटपुट परिणाम को ऑब्जेक्ट फाइल के रूप में जाना जाता है जो मशीन के साथ-साथ इन निर्देशों को अपनी मेमोरी में संग्रहित करने के लिए आवश्यक डाटा का संयोजन करता है |
linker
लिंकर निष्पादन योग्य फाइल बनाने के लिए विभिन्न ऑब्जेक्ट फाइलों को लिंक और मर्ज करने में आपकी सहायता करता है इन सभी फाइलों को अलग-अलग असेंबलरों के साथ Compile किया जाता है
एक लिंकर का मुख्य कार्य एक प्रोग्राम में लाए गए मॉड्यूल की खोज करना है और मेमोरी का पता लगाना है जहां सभी मॉड्यूल स्थित है |
loader
लोडर o s का हिस्सा है जो कि निष्पादन योग्य फाइलों को मेमोरी में लोड करने और उन्हें चलाने का कार्य करता है यह एक प्रोग्राम के आकार की भी गणना करता है जो अतिरिक्त मेमोरी स्पेस बनाता है |
कंपाइलर के कार्य प्रणाली
कंपाइलर के कार्य प्रणाली को हम निम्ननुसार से समझ सकते है
- यह कार्यों को phases में पूरा करता है जो कुशल डिजाइन को बढ़ावा देता है |
- टारगेट आउटपुट के लिए सोर्स इनपुट के सही परिवर्तन को बढ़ावा देता है |
- कंपाइलिंग के कारण होने वाले प्रोग्राम दोष को ट्रैक करना |
Preprocessing
माइक्रो प्रतिस्थापन और कंडीशनल कंपाइलेशन का सपोर्ट करता है या लक्ष्य एवं सिंटेक्स के पहले होता है |
Lexical analyzer
इसे स्कैनर भी कहते हैं कंपाइलर(Compiler)सोर्स कोड में दिखाई देने वाले वर्णों के अनुक्रम को कन्वर्ट करता है जो कि स्ट्रिंग वर्णों की एक श्रृंखला के रूप में होता है इसे ही हम टोकन कहते हैं
टोकन का मतलब है कि मान लो z=5*x (z को modifier, = को assignment, 5 को content, * को operator, ओर x को identifier) तो यह लिखकर एनालाइजर इन character को पांच टोकन देकर अलग कर दिया या उन सिंबल को एक अलग अलग नंबर या आइडेंटिफिकेशन में अलग करना ही टोकन है और उसे सिंबल और टेबल में सेव कर दिया |
क्योंकि प्रोग्रामर के माध्यम से कोई कोड जब lexical के पास आता है जैसे किवर्ड, सिनटेक्स या सिंबल तो उनके लिए lexical एनालाइजर सबसे पहले उनके लिए टोकन जनरेट करता है अगले स्टेप के लिए टोकन जनरेटर भी कहा जाता है|
टोकन रेगुलर एक्सप्रेशन द्वारा परिभाषित किया जाता है और व्याख्यात्मक विश्लेषक द्वारा समझा जाता है क्योंकि एक विशिष्ट नियम द्वारा एक शाब्दिक विश्लेषक नामक कार्यक्रम से जुड़े होते हैं |
Syntax analyzer
लैक्सियल द्वारा भेजा गया टोकन सिंटेक्स एनालाइजर के पास आता है जितने भी टोकन lexical analyzer के द्वारा सिंटेक्स के पास आता है उन सारे टोकन को वेरीफाई करता है और उनके अंदर जितने भी सिंटेक्स use हुए हैं उन्हें भी वेरीफाई करता है |
ओर चेक करता है कि सारे सिंटेक्स सही हो या इसे ऐसे भी समझ सकते हैं की सिंटेक्स analyzer पार्सट्री का निर्माण करता है जिसे दिए गए व्याकरण में अस्पष्टता की जांच के लिए बनाया गया है |
सिंटेक्स analyzer एक-एक करके सभी टोकन लेता है और पार्स ट्री बनाने के लिए कांटेक्ट फ्री ग्रामर का उपयोग करता है यदि इनपुट व्याकरण के अनुसार नहीं है तो सिंटेक्स त्रुटि का पता लगा लेता है |
Semantic analyzer
यह एनालाइजर मुख्य रूप से लॉजिक एरर को चेक करता है ओर सारे वैरियेबल्स को चेक किया कि नहीं जैसे टाइप चेकिंग, ऑब्जेक्ट बाइंडिंग, डेफिनिटी असाइनमेंट, रिजेक्टिंग इनकरेक्ट प्रोग्राम जैसे सारे लैक्सियन टाइप एरर और सिनटेक्स टाइप एरर को चेक करना एवं उनकी चेतावनी देना इसके लिए वह पार्स् ट्री का उपयोग करता है |
जिससे यह बता सकते हैं कि इसने जो भी जानकारी चेक किया है वह पार्स ट्री के तर्क के अनुसार सही है जैसा कि यह लॉजिकल एरर को चेक करता है यह उसकी स्टैटिक स्कोपिंग और डायनामिक scoping को भी चेक करता है
जब कंपाइलिंग प्रोसेस को रन किया जा रहा होता है तब इसके लिए यह सिंटेक्स डायरेक्टरी ट्रांसलेटर(S.D.T) का उपयोग करता है इसमें ग्रामर के रूल के अनुसार एक्शन लगा देते हैं की रूल के हिसाब से मुझे क्या परफॉर्म करना है जैसे कुछ को प्रिंट करना है इसे हम एसडीटी के अंतर्गत करते हैं |
intermediate code generator
सिमएंटीक से आने वाले पार्स ट्री को 3 एड्रेस में कन्वर्ट करता है कहने का अर्थ यह है कि यह इंटरमीडिएट कोड अंतिम 2 चरणों का उपयोग करके मशीनी भाषा में परिवर्तित करता है यह मशीन इंडिपेंडेंट कोड जनरेट करता है |
code optimizer
कोड optimizer कोड को रूपान्तरित करता है ताकि वह कम संसाधन की खपत करें और अधिक गति को उत्पन्न कर सके जिस कोड को रूपान्तरित किया जाता है उसके अर्थ को नहीं बदला जाता है
कहने का अर्थ यह है कि इंटरमीडिएट द्वारा जो 3 एड्रेस कोड जनरेट किया जाता है उस कोड को यहां पर ऑप्टिमाइज किया जाता है |
target code generator
यह कंपाइलेशन का अंतिम चरण होता है जिसमें टारगेट कोड जनरेटर कोड को जनरेट करता है और उसे मशीन लैंग्वेज में कन्वर्ट करता है ताकि कंप्यूटर उसे समझ सके या प्रोसेसर समझ सके |
आउटपुट assembler की प्रकृति पर निर्भर करता है जो अनुकूलित कोड को मशीन कोड में कन्वर्ट कर दिया जाता है जिससे लिंगर और लोडर को इनपुट मिल जाता है |
कंपाइलर का इतिहास
दूसरे विश्व युद्ध के दौरान वैज्ञानिकों, गणितज्ञों और इंजीनियरों द्वारा विकसित सैद्धान्तिक कंप्यूटिंग अवधारणाओं ने डिजिटल आधुनिक कंप्यूटर विकास का आधार बनाया-जिससे आदिम बायनरी भाषाएं विकसित हुई |
क्योंकि डिजिटल डिवाइस केवल एक और शून्य मे अंतर्निहित मशीन आर्किटेक्चर में सर्किट पेटर्न को समझते हैं 1940 के दशक के अंत में कंप्यूटर आर्किटेक्चर के अधिक व्यावहारिक अमूर्तता की पेशकश करने के लिए असेंबली भाषा में बनाई गई |
शुरुआती कंप्यूटर की सीमित मेमोरी क्षमता के कारण पहले कंपाइलर(Compiler)डिजाइन किए जाने पर पर्याप्त चुनौतियों का सामना करना पड़ा | इसलिए संकलन प्रक्रिया को कई छोटे कार्यक्रमों में विभाजित करने की आवश्यकता पड़ी |
फ्रंट एंड प्रोग्राम लक्ष्य कोड उत्पन्न करने के लिए बैक ऐंड प्रोग्राम द्वारा उपयोग किए जाने वाले विश्लेषण उत्पादों का उत्पादन करते हैं क्योंकि कंप्यूटर प्रौद्योगिकी ने अधिक संसाधन प्रदान किए हैं इसलिए संकलक डिजाइन संकलन प्रक्रिया के साथ बेहतर ढंग से संरेखित हो सकते हैं
प्रोग्रामर के लिए उच्च स्तरीय भाषा का उपयोग करना आमतौर पर अधिक उत्पादक होता है इसलिए उच्च स्तरीय भाषाओं का विकास स्वभाविक रूप से डिजिटल कंप्यूटर द्वारा प्रदान की जाने वाली क्षमताओं से होता है
उच्च स्तरीय भाषाएं औपचारिक भाषाएं होती है जिन्हें उनके वाक्य विन्यास और शब्दार्थ द्वारा कड़ाई से प्रभावित किया जाता है जो उच्च स्तरीय भाषा वस्तु कला का निर्माण करतेहैं और जो औपचारिक भाषाओं के तत्वों में शामिल है |
- वर्णमाला
- प्रतिको का कोई कोई भी finite सेट
- स्ट्रिंग
- प्रतीकों का एक सीमित क्रम
- भाषा
- वर्णमाला पर स्ट्रिंग का कोई भी सेट
कंपाइलर के प्रकार
- डी कंपाइलर क्या होता है
- क्रॉस कंपाइलर क्या होता है
- सिंगल पास कंपाइलर
- डुअल पास कंपाइलर
- मल्टी पास Compiler
कंपाइलर के मुख्य भाग
कंपाइलर को कार्य के अनुसार 3 भाग
- फ़्रंट एंड (front end) :-
- पूर्व प्रसंस्करण (preprocessing)
- शाब्दिक विश्लेषण (lexical analysis)
- सिंटैक्स विश्लेषण (Syntax analysis)
- अर्थ विश्लेषण (semantic analysis)
- बैक इंड (back ind) :-
- कोड अनुकूलन (Code Optimization)
- लक्ष्य कोड पीढ़ी (target code generation)
कंपाइलर के उपयोग
- किसी भी प्रकार के एरर पुष्टि करने के लिए
- तेजी से काम करने के लिए
- आंतरिक मेमोरी संरचना बनाने के लिए
- प्रोग्राम को किसी भी मशीन में निष्पादित करने के लिए
- पूरे प्रोग्राम को दूसरी भाषा में कन्वर्ट करने के लिए
- डिस्क पर फाइल जनरेट करने के लिए
- फाइंड को एग्जीक्यूटेबल फॉर्मेट में लिंक करने के लिए
- सिनटेक्स त्रुटियों ओर डाटा प्रकारों की जांच करने के लिए
हमने जाना
मुझे विश्वास है आप लोगों को मेरा यह लेख Compiler क्या है ? जरूर पसंद आया होगा – इस लेख में हमने कंपाइलर को समझाया है कि कैसे हाई लेवल लैंग्वेज में लिखे सोर्स कोड को मशीनी भाषा में कंपाइल करता है |
कंपाइलिंग के लिए जरूरी प्रोसेस जैसे लैक्सियन एनालाइजर , सिंटेक्स एनालाइजर ,सीमेंटीक एनालाइजर आदि को बहुत कम शब्दों में समझाने का प्रयास किया है |
Compiler के इतिहास और इसके प्रकार एवं इसके उपयोग की संक्षिप्त जानकारी देने का प्रयास किए हैं ताकि कंपाइलिंग के विषय में आपकी जानकारी में थोड़ी वृद्धि हो सके इस लेख को पढ़ने के लिए धन्यवाद |