Pages

Monday, 4 July 2016

What is Compiler in C ? / कंपाइलर क्या होता हैं ?



कंपाइलर
कंपाइलर कम्प्युटर का एक प्रोग्राम हैं, जो सोर्स कोड को पढ़ कर उसे असेम्बली कोड या एक्स्क्यूटेबल कोड मे तब्दील करता हैं। कोई भी सॉफ्टवेयर या प्रोग्राम के निर्माण मे दो हिस्से होते हैं।
       1-  सोर्स कोड का निर्माण
       2-  एक्स्क्यूटेबल कोड का निर्माण

सोर्स कोड

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

अब यहा पर एक उदाहरण मे ध्यान दे, माना की दो व्यक्ति हैं, एक का नाम राम और दूसरे का नाम टॉम हैं। राम हिन्दी जानता हैं पर अँग्रेजी नहीं जानता, टॉम अँग्रेजी जानता हैं पर हिन्दी नहीं जानता। अब राम को टॉम से अगर बात करनी हैं तो राम को अँग्रेजी बोलते आना चाहिए, अन्यथा राम अपनी बात टॉम को नहीं समझा सकता हैं।

तब राम और टॉम के बीच कैसे संवाद होंगे? इसके तीन रास्ते हैं, पहला राम अँग्रेजी सीख ले, दूसरा टॉम हिन्दी सीख ले और तीसरा एक ऐसा बिचौलिया रखा जाए जिससे अँग्रेजी और हिन्दी दोनों भाषा आती हो यानि अनुवादक।

ठीक ऐसी स्थिति हमारे कम्प्युटर प्रोग्रामिंग मे निर्मित होती हैं। जैसे राम अँग्रेजी नहीं जानता ठीक उसी तरह हमारे प्रोग्रामर मशीन भाषा नहीं जानते हैं, जैसे टॉम हिन्दी नहीं जानता ठीक वैसे ही कम्प्युटर मानवी भाषा नहीं जानता, तब दोनों परस्पर एक दूसरे से संवाद कर सके इसके लिए कम्प्युटर प्रोग्रामिंग मे अनुवादक को रखा गया हैं। जिसे हम कंपाइलर के नाम से जानते हैं।
जैसे अनुवादक राम द्वारा बोले गए हिन्दी को अँग्रेजी मे अनुवादित करता हैं ठीक उसी प्रकार कंपाइलर प्रोग्रामर द्वारा लिखे गए कोड को (जो की अँग्रेजी मे होता हैं) बदल कर मशीन भाषा मे परिवर्तित कर देता हैं। जिससे कम्प्युटर उस कोड को समझ सके।

एक्स्क्युटेबल कोड :

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

कंपाइलर प्रोसेस के चरण :

जब कंपाइलर सोर्स कोड को पढ़ कर उसे असेंबली या एक्सिक्युटेबल कोड मे अनुवादित करता हैं इस दौरान पूरी प्रक्रिया कई चरणो मे सम्पन्न होती हैं। 6 चरण के कंपाइल प्रक्रिया के बाद ही सोर्स कोड एक्सिक्युटेबल कोड मे तब्दील हो पता हैं। नीचे 6 चरणो को लिखा गया हैं-

1 – लेक्सीकल एनालिसिस प्रोसेस
2 – सिंटेक्स एनालिसिस
3 – सीमेंटिक एनालिसिस
4 – इंटरमिडिएट कोड जनरेशन
5 – कोड ओप्टिमाइजर
6 – कोड जनरेशन


1 – लेक्सीकल एनालिसिस
                        लेक्सीकल एनालिसिस एक प्रोसेस हैं, जिसके अंतर्गत सोर्स कोड मे उपयोग किए गए स्ट्रिंग्स (क्रमबद्ध अक्षरो) को टोकेंस के परिवर्तित करता हैं। प्रोग्राम मे मौजूद स्ट्रिंग से टोकेन मे परिवर्तित करने का काम कपाइलर मे मौजूद एक प्रोग्राम करता हैं जिसे लेक्सर के नाम से जाना जाता हैं।
उदाहरण के लिए माना हमारे पास एक कोड हैं sum = num1 + num2 ; अब देखते हैं की लेक्सर इस सोर्स कोड को टोकन मे तब्दील निम्न रूम मे करेगा।
 

लेक्सीकल एनालिसिस के दौरान सिम्बल टेबल बनाया जाता हैं जिसमे स्ट्रिंग को टोकन मे परिवर्तित करने की प्रक्रिया को सूचीबद्ध किया जाता हैं। जिसे आप नीचे देख सकते हैं।

Token
Type
Sum
Identifiers
=
Operator
num1
Identifiers
+
Symbol
num2
Identifiers
;
Seperator

2 – सिंटेक्स एनालिसिस
                        सिंटेक्स एनालिसिस कंपाइलेसन का दूसरा फेज (चरण) हैं। इसको सिंटेक्स एनालिसिस के अलावा हेरारिकल (herarichal) एनालिसिस या पारशिंग (parsing) भी कहा जाता हैं। सिंटेक्स एनालिसिस टोकन को एकत्र कर parsing tree का निर्माण करती हैं। जिसकी सहायता से सोर्स कोड मे उपयोग किए गए इन्सट्रक्शन को चेक किया जाता हैं की वह सही स्थान मे हैं की नहीं। सिंटेक्स एनालिसिस के दौरान यह जाचा जाता हैं की प्रोग्राम मे उपयोग की गई, हर इकाई, अपनी जगह पर है या नहीं। इस दौरान parsing tree बनाया जाता हैं जो निम्न प्रकार से हैं। 

3 – सीमेंटिक एनालिसिस :
                        सीमेंटिक एनालिसिस मे टोकन की वैधता को जांचा जाता हैं। parse tree मे parsing किए गए statement की मीनिंग (अर्थ) को सीमेंटिक एनालिसिस मे चेक किया जाता हैं। parse tree मे दिये गए इन्फॉर्मेशन  के एक भाग को उसी tree के दूसरे भाग से तुलना की जाती हैं। जैसे वेरिएबल को दिया गया मान वेरिएबल के प्रकार से मिलता हैं की नहीं।

ऊपर हमने एक वेरिएबल बनाया हैं जिसका नाम a है तथा उसका डाटा प्रकार इंटीजर हैं। अब अगले लाइन मे देखिये a को जो वैल्यू दी गई हैं जो की 12.5 हैं जो उसके डाटा टाइप से मेल नहीं खाती तब ऐसी स्थिति मे यह कोड लेक्सीकल और सिंटेक्स एनालिसिस मे पकड़ी नहीं जाएगी पर सीमेंटिक मे यह चेक होगी और एर्र जनरेट करेगी। इसी प्रकार से कई सीमेंटिक एर्र को इस फेस मे चेक किया जाता हैं।

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

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

5 – कोड ओप्टिमाइज़र
                 
                  कोड ओप्टिमाइजेशन एक मेथड हैं जिसके अंतर्गत कोड की क्वालिटी को बढ़ाने के लिए तथा उसकी कार्य क्षमता एवं दक्षता को बढ़ाने के लिए उसमे कुछ सुधार (modification) किए जाते हैं। एक प्रोग्राम ओप्टिमाइज़ेशन के बाद निम्न बिन्दुओ पर फंक्शन करना चाहिए
      1 – प्रोग्राम का आकार छोटा हो जाए।
      2 – कम्प्युटर की मेमोरी कम से कम उपयोग करे।
      3 – ज्यादा गति से क्रियान्वित हो।
      4 – कम से कम इनपुट / आउटपुट आपरेशन करे।

6 – कोड जनरेशन

                  कोड जनरेशन कंपाइलर का अंतिम स्टेप (चरण हैं)। यह ओप्टिमाइज़ इंटरमिडिएट कोड को इनपुट के रूप मे लेकर टार्गेट कोड के निर्माण की प्रक्रिया को पूरा करता हैं। जिसके जिसके अंतर्गत निम्न कार्य होते हैं।
      1 – इन्सट्रक्शन का चयन।
      2 – रजिस्टर एलोकेशन (Register Allocation) और assignment क्या जाता हैं।
      3 – इन्सट्रक्शन को क्रमबद्ध करना (Instruction Ordering)

No comments:
Write comments

Popular Posts

Recommended Posts ×