भाषा अभिकल्प, अनुवाद प्रकरण व प्रारंभिक आँकड़ा प्रकार

इकाई 3 (प्रोग्रामिंग भाषाएँ व कंप्यूटर ग्राफ़िक्स) अधिकांशतः NET-मात्र सामग्री है — GATE CS संकलक-सिद्धांत-सन्निकट प्रोग्रामिंग-भाषा-अभिकल्प के प्रश्न नहीं पूछता, और उसका कंप्यूटर-ग्राफ़िक्स खंड बिल्कुल नहीं है। यह अध्याय इकाई को प्रोग्रामिंग-भाषा संकल्पनाओं व प्रतिमानों, हर भाषा-कार्यान्वयन द्वारा अनुसरित अनुवाद-पाइपलाइन, तथा आँकड़ा-प्रकारों के उस वर्गीकरण से खोलता है जिसके विरुद्ध हर बाद की भाषा (C, C++, Java) वर्णित होती है।

प्रोग्रामिंग प्रतिमान व प्रतिरूप

मुख्य प्रतिमान
प्रतिमानमूल विचारप्रतिनिधि भाषाएँ
आदेशात्मक/प्रक्रियात्मककथनों का अनुक्रम जो निर्धारण द्वारा प्रोग्राम-स्थिति बदलता है।C, पास्कल, फ़ोरट्रान
वस्तु-उन्मुखसंदेश-कॉल से संचार करती वस्तुओं में बँधे स्थिति व व्यवहार।C++, Java, स्मॉलटॉक
फलनात्मकगणना दुष्प्रभाव-रहित गणितीय फलनों के मूल्यांकन के रूप में; कोई परिवर्तनशील स्थिति नहीं।हास्केल, लिस्प, ML
तर्क/घोषणात्मकप्रोग्रामर बताता है WHAT (तथ्य व नियम); रनटाइम अनुमान से HOW निकालता है।प्रोलॉग
ℹ️ बंधन-समय — प्रोग्राम संबंधी निर्णय कब स्थिर होता है
बंधन किसी प्रोग्राम-अवयव (चर का प्रकार, उसका भंडारण-स्थान, पहचानकर्ता का अर्थ) संबंधी निर्णय है और उसका बंधन-समय वह है जब वह निर्णय अपरिवर्तनीय रूप से लिया जाता है। स्थैतिक बंधन संकलन-समय पर होते हैं (उदा० स्थैतिक-रूप से टाइप किए चर का प्रकार); गतिक बंधन रन-समय पर होते हैं (उदा० आभासी विधि-कॉल का वास्तविक लक्ष्य, वस्तु के रनटाइम-प्रकार से हल)। पूर्वतर बंधन सामान्यतः तेज़ निष्पादन व अधिक संकलन-समय त्रुटि-जाँच देता है; बाद का बंधन अधिक लचीलापन देता है (जैसे गतिक प्रेषण व निर्वचित भाषाओं में)।

अनुवाद के चरण, तथा औपचारिक अनुवाद प्रतिरूप

  • शाब्दिक विश्लेषण अक्षरों को टोकनों में समूहित करता है; वाक्य-रचना विश्लेषण (पार्सिंग) टोकन-प्रवाह को व्याकरण से जाँचता है व पार्स/वाक्य-रचना वृक्ष बनाता है; शब्दार्थ विश्लेषण अर्थ-स्तरीय नियम (प्रकार-संगति, कार्यक्षेत्र) जाँचता है जिन्हें संदर्भ-मुक्त व्याकरण व्यक्त नहीं कर सकता; मध्यवर्ती कोड सर्जन मशीन-स्वतंत्र रूप उत्पन्न करता है; अनुकूलन उसे सुधारता है; कोड सर्जन लक्ष्य मशीन-कोड उत्पन्न करता है। यही वह पाइपलाइन है जिसे उधार लिए GATE संकलक अभिकल्प अध्याय वाक्य-रचना-से-अनुकूलन चरणों हेतु गहराई से ढकते हैं — इस अध्याय की अपनी चिंता उन कलनविधियों को पुनः व्युत्पन्न करना नहीं, इसके इर्द-गिर्द की भाषा-अभिकल्प शब्दावली है।
  • संकलक निष्पादन आरंभ होने से पहले संपूर्ण स्रोत-प्रोग्राम को लक्ष्य-कोड में अनुवादित करता है; निर्वचक स्रोत (या मध्यवर्ती रूप) को कथन-दर-कथन निष्पादित करता है, स्वतंत्र लक्ष्य-प्रोग्राम उत्पन्न किए बिना; अनुवादक दोनों को ढकने वाला सामान्य शब्द है, तथा असेंबलर विशेष रूप से असेंबली भाषा को मशीन-कोड में अनुवादित करने वाला अनुवादक है।

प्रकार व वस्तुओं के गुण; अदिश व संयुक्त आँकड़ा प्रकार

प्रकार मानों का समुच्चय है साथ ही उन पर संक्रियाओं का समुच्चय, और यह रन-समय से पहले त्रुटियों की एक पूरी श्रेणी पकड़ने (पूर्णांक चर को स्ट्रिंग सौंपना) व मंतव्य दस्तावेज़ित करने हेतु विद्यमान है। अदिश (आद्य) प्रकार एक मान रखते हैं — पूर्णांक, चल-बिंदु, अक्षर, बूलियन, गणन। संयुक्त (संरचित) प्रकार अदिशों से बनते हैं: सरणी सूचकांक से यादृच्छिक-पहुँच वाला स्थिर-आकार सजातीय संग्रह है; रिकॉर्ड/स्ट्रक्ट नामित क्षेत्र से पहुँच वाला स्थिर-आकार विजातीय संग्रह है; यूनियन एक ही स्मृति-स्थान पर कई क्षेत्र अध्यारोपित करता है, एक समय केवल एक रखते हुए (व इसीलिए यह जानने हेतु कहीं और विवेचक चाहिए कि वर्तमान में कौन वैध है); संकेतक स्वयं मान के बजाय किसी अन्य मान का पता रखता है।

⚠️ सुदृढ़ टाइपिंग बनाम स्थैतिक टाइपिंग भिन्न अक्ष हैं
स्थैतिक/गतिक टाइपिंग इस बारे में है कि प्रकार कब जाँचे जाते हैं — संकलन-समय या रन-समय। सुदृढ़/दुर्बल टाइपिंग इस बारे में है कि क्या भाषा असंगत प्रकारों के बीच अंतर्निहित, अर्थ-बदलने वाले रूपांतरणों की अनुमति देती है। पायथन गतिक-रूप से टाइप्ड है पर काफ़ी सुदृढ़ रूप से टाइप्ड (यह चुपचाप स्ट्रिंग को पूर्णांक में नहीं जोड़ेगा); C स्थैतिक-रूप से टाइप्ड है पर तुलनात्मक रूप से दुर्बल-रूप से टाइप्ड (यह कई अंतर्निहित संख्यात्मक/संकेतक रूपांतरणों की अनुमति देता है)। जब कोई प्रश्न दोनों अक्षों को पार करे तो उन्हें मिलाएँ नहीं।

प्रोग्रामिंग परिवेश व आभासी कंप्यूटर

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

मुख्य बिंदु

  • चार मुख्य प्रतिमान — आदेशात्मक, वस्तु-उन्मुख, फलनात्मक, तर्क — इसमें भिन्न हैं कि प्रोग्राम क्या है (स्थिति-परिवर्तनों का अनुक्रम, संचार करती वस्तुएँ, फलन-मूल्यांकन, या तथ्य व नियम)।
  • बंधन-समय (स्थैतिक बनाम गतिक) पूर्वतर त्रुटि-जाँच/गति का व्यापार बाद के लचीलेपन से करता है।
  • अनुवाद शाब्दिक → वाक्य-रचना → शब्दार्थ विश्लेषण → मध्यवर्ती कोड → अनुकूलन → कोड सर्जन क्रम में चलता है; संकलक स्वतंत्र लक्ष्य-कोड उत्पन्न करता है, निर्वचक सीधे निष्पादित करता है।
  • सरणी, रिकॉर्ड, यूनियन व संकेतक — अदिश प्रकारों से बनी चार संयुक्त-प्रकार रचनाएँ हैं।
  • स्थैतिक/गतिक टाइपिंग (कब जाँचा जाता है) व सुदृढ़/दुर्बल टाइपिंग (क्या अंतर्निहित असुरक्षित रूपांतरण अनुमत हैं) स्वतंत्र अक्ष हैं — इन्हें मिलाएँ नहीं।

अभ्यास प्रश्न (8)

उत्तर खोलने से पहले प्रत्येक प्रश्न हल करें। हर व्याख्या सही विकल्प के साथ लुभावना गलत विकल्प भी बताती है, क्योंकि अंक वहीं जाते हैं।

  1. फलनात्मक प्रोग्रामिंग प्रतिमान मुख्यतः इससे अभिलक्षित है:

    1. दुष्प्रभाव-रहित गणितीय फलनों के मूल्यांकन के रूप में गणना, बिना किसी परिवर्तनशील स्थिति के
    2. वस्तुओं में बँधी स्थिति व व्यवहार
    3. प्रोग्रामर द्वारा रनटाइम के अनुमान हेतु तथ्य व नियम कहना
    4. स्थिति-परिवर्तनकारी कथनों का कड़ा अनुक्रम
    उत्तर देखें

    उत्तर: A — दुष्प्रभाव-रहित गणितीय फलनों के मूल्यांकन के रूप में गणना, बिना किसी परिवर्तनशील स्थिति के

    हास्केल जैसी फलनात्मक भाषाएँ बिना परिवर्तनशील स्थिति के फलन-अनुप्रयोग के रूप में गणना प्रतिरूपित करती हैं; अन्य तीन विकल्प क्रमशः आदेशात्मक, तर्क व (फिर) आदेशात्मक शैलियाँ वर्णित करते हैं।
  2. वस्तु के वास्तविक (गतिक) प्रकार के आधार पर रन-समय पर अपने वास्तविक लक्ष्य में हल हुई आभासी विधि-कॉल इसका उदाहरण है:

    1. गतिक (विलंबित) बंधन
    2. स्थैतिक (पूर्व) बंधन
    3. दुर्बल टाइपिंग
    4. शाब्दिक विश्लेषण
    उत्तर देखें

    उत्तर: A — गतिक (विलंबित) बंधन

    कौन सी विधि-वस्तु वस्तुतः चलेगी, यह निर्णय रन-समय तक टाला जाता है और वस्तु के गतिक प्रकार पर निर्भर करता है — यही गतिक (विलंबित) बंधन की परिभाषित विशेषता है, संकलन-समय पर स्थिर निर्णय के विपरीत।
  3. मानक अनुवाद-पाइपलाइन में, कौन-सा चरण टोकन-प्रवाह से पार्स/वाक्य-रचना वृक्ष बनाता है?

    1. वाक्य-रचना विश्लेषण (पार्सिंग)
    2. शाब्दिक विश्लेषण
    3. कोड सर्जन
    4. अनुकूलन
    उत्तर देखें

    उत्तर: A — वाक्य-रचना विश्लेषण (पार्सिंग)

    शाब्दिक विश्लेषण वह टोकन-प्रवाह उत्पन्न करता है जिसे वाक्य-रचना विश्लेषण फिर व्याकरण से जाँचता है, वह पार्स वृक्ष बनाते हुए जिसे बाद के चरण उपयोग करते हैं — यह क्रम इसलिए स्थिर है कि पार्सिंग को कच्चे अक्षरों के बजाय टोकन चाहिए।
  4. यूनियन आँकड़ा-प्रकार रिकॉर्ड (स्ट्रक्ट) से मुख्यतः इस प्रकार भिन्न है:

    1. यूनियन के सभी क्षेत्र उसी स्मृति पर अध्यारोपित होते हैं, एक समय केवल एक वैध मान रखते हुए
    2. यूनियन केवल पूर्णांक रख सकता है
    3. यूनियन के कोई क्षेत्र ही नहीं होते
    4. यूनियन उन्हीं क्षेत्रों वाले रिकॉर्ड से सदा बड़ा होता है
    उत्तर देखें

    उत्तर: A — यूनियन के सभी क्षेत्र उसी स्मृति पर अध्यारोपित होते हैं, एक समय केवल एक वैध मान रखते हुए

    रिकॉर्ड हर क्षेत्र हेतु एक साथ पृथक भंडारण आवंटित करता है; यूनियन अपने सबसे बड़े क्षेत्र हेतु पर्याप्त भंडारण आवंटित करता है और हर क्षेत्र को उसी भंडारण पर अध्यारोपित करता है, अतः किसी भी क्षण केवल एक क्षेत्र सार्थक रूप से वैध होता है — सामान्यतः पृथक विवेचक से ट्रैक किया गया।
  5. पायथन को प्रायः गतिक-रूप से टाइप्ड पर सुदृढ़-रूप से टाइप्ड वर्णित किया जाता है। इसका अर्थ है:

    1. प्रकार रन-समय पर जाँचे जाते हैं, और भाषा असंगत प्रकारों के बीच अर्थ-बदलने वाले रूपांतरणों को चुपचाप अनुमति नहीं देती
    2. प्रकार संकलन-समय पर जाँचे जाते हैं, और कोई भी रूपांतरण अनुमत है
    3. स्थैतिक व सुदृढ़ टाइपिंग का अर्थ ठीक एक ही है
    4. पायथन का कोई प्रकार-तंत्र ही नहीं है
    उत्तर देखें

    उत्तर: A — प्रकार रन-समय पर जाँचे जाते हैं, और भाषा असंगत प्रकारों के बीच अर्थ-बदलने वाले रूपांतरणों को चुपचाप अनुमति नहीं देती

    स्थैतिक/गतिक (कब जाँचा जाता है) व सुदृढ़/दुर्बल (क्या असुरक्षित अंतर्निहित रूपांतरण अनुमत हैं) स्वतंत्र अक्ष हैं; पायथन पहले पर विलंबित (गतिक) व दूसरे पर कड़ा (सुदृढ़) है।
  6. Java आभासी मशीन का बाइटकोड अनुदेश-समुच्चय इसका उदाहरण है:

    1. आभासी कंप्यूटर — वह मशीन जिसके विरुद्ध भाषा का शब्दार्थ परिभाषित है
    2. भौतिक हार्डवेयर अनुदेश-समुच्चय
    3. प्रोग्रामिंग प्रतिमान
    4. संयुक्त आँकड़ा प्रकार
    उत्तर देखें

    उत्तर: A — आभासी कंप्यूटर — वह मशीन जिसके विरुद्ध भाषा का शब्दार्थ परिभाषित है

    बाइटकोड किसी भौतिक CPU के बजाय JVM सॉफ़्टवेयर से निष्पादित होता है, जो ठीक वही है जो उसी संकलित .class फ़ाइल को JVM वाली किसी भी मशीन पर बिना संशोधन चलने देता है — आभासी कंप्यूटर की परिभाषा।
  7. निम्नलिखित में कौन अदिश (आद्य) आँकड़ा-प्रकारों के उदाहरण हैं? (एक से अधिक विकल्प सही हो सकते हैं।)

    1. पूर्णांक
    2. बूलियन
    3. पूर्णांकों की सरणी
    4. तीन क्षेत्रों वाला रिकॉर्ड
    उत्तर देखें

    उत्तर: A — पूर्णांक; B — बूलियन

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

    संख्यात्मक उत्तर — मान टाइप करें।

    उत्तर देखें

    उत्तर: interpreter

    निर्वचक हर कथन को बारी-बारी पढ़ता व निष्पादित करता है, संकलक के विपरीत, जो किसी भी निष्पादन के आरंभ होने से पहले पूरे प्रोग्राम को लक्ष्य-कोड में अनुवादित करता है।