भाषा अभिकल्प, अनुवाद प्रकरण व प्रारंभिक आँकड़ा प्रकार
अनुवाद के चरण, तथा औपचारिक अनुवाद प्रतिरूप
- शाब्दिक विश्लेषण अक्षरों को टोकनों में समूहित करता है; वाक्य-रचना विश्लेषण (पार्सिंग) टोकन-प्रवाह को व्याकरण से जाँचता है व पार्स/वाक्य-रचना वृक्ष बनाता है; शब्दार्थ विश्लेषण अर्थ-स्तरीय नियम (प्रकार-संगति, कार्यक्षेत्र) जाँचता है जिन्हें संदर्भ-मुक्त व्याकरण व्यक्त नहीं कर सकता; मध्यवर्ती कोड सर्जन मशीन-स्वतंत्र रूप उत्पन्न करता है; अनुकूलन उसे सुधारता है; कोड सर्जन लक्ष्य मशीन-कोड उत्पन्न करता है। यही वह पाइपलाइन है जिसे कोर्स के संकलक अभिकल्प अध्याय वाक्य-रचना-से-अनुकूलन चरणों हेतु गहराई से ढकते हैं — इस अध्याय की अपनी चिंता उन कलनविधियों को पुनः व्युत्पन्न करना नहीं, इसके इर्द-गिर्द की भाषा-अभिकल्प शब्दावली है।
- संकलक निष्पादन आरंभ होने से पहले संपूर्ण स्रोत-प्रोग्राम को लक्ष्य-कोड में अनुवादित करता है; निर्वचक स्रोत (या मध्यवर्ती रूप) को कथन-दर-कथन निष्पादित करता है, स्वतंत्र लक्ष्य-प्रोग्राम उत्पन्न किए बिना; अनुवादक दोनों को ढकने वाला सामान्य शब्द है, तथा असेंबलर विशेष रूप से असेंबली भाषा को मशीन-कोड में अनुवादित करने वाला अनुवादक है।
प्रकार व वस्तुओं के गुण; अदिश व संयुक्त आँकड़ा प्रकार
प्रकार मानों का समुच्चय है साथ ही उन पर संक्रियाओं का समुच्चय, और यह रन-समय से पहले त्रुटियों की एक पूरी श्रेणी पकड़ने (पूर्णांक चर को स्ट्रिंग सौंपना) व मंतव्य दस्तावेज़ित करने हेतु विद्यमान है। अदिश (आद्य) प्रकार एक मान रखते हैं — पूर्णांक, चल-बिंदु, अक्षर, बूलियन, गणन। संयुक्त (संरचित) प्रकार अदिशों से बनते हैं: सरणी सूचकांक से यादृच्छिक-पहुँच वाला स्थिर-आकार सजातीय संग्रह है; रिकॉर्ड/स्ट्रक्ट नामित क्षेत्र से पहुँच वाला स्थिर-आकार विजातीय संग्रह है; यूनियन एक ही स्मृति-स्थान पर कई क्षेत्र अध्यारोपित करता है, एक समय केवल एक रखते हुए (व इसीलिए यह जानने हेतु कहीं और विवेचक चाहिए कि वर्तमान में कौन वैध है); संकेतक स्वयं मान के बजाय किसी अन्य मान का पता रखता है।
प्रोग्रामिंग परिवेश व आभासी कंप्यूटर
- आभासी कंप्यूटर वह मशीन है जिसके विरुद्ध किसी भाषा का शब्दार्थ वस्तुतः परिभाषित होता है — उदाहरणतः Java आभासी मशीन का बाइटकोड अनुदेश-समुच्चय — न कि कोई भौतिक हार्डवेयर; यही वह है जो उसी संकलित प्रोग्राम को बिना संशोधन विभिन्न वास्तविक मशीनों पर चलने देता है।
- प्रोग्रामिंग परिवेश विकास का समर्थन करने वाली सम्पूर्ण उपकरण-शृंखला है — संपादक/IDE, संकलक/निर्वचक, लिंकर, डिबगर, संस्करण-नियंत्रण — और उसका एकीकरण-स्तर (बंडलित IDE बनाम पृथक कमांड-लाइन उपकरण) स्वयं एक भाषा-अभिकल्प-सन्निकट चुनाव है जो भाषा की अपनी वाक्य-रचना से स्वतंत्र रूप से उत्पादकता प्रभावित करता है।
मुख्य बिंदु
- चार मुख्य प्रतिमान — आदेशात्मक, वस्तु-उन्मुख, फलनात्मक, तर्क — इसमें भिन्न हैं कि प्रोग्राम क्या है (स्थिति-परिवर्तनों का अनुक्रम, संचार करती वस्तुएँ, फलन-मूल्यांकन, या तथ्य व नियम)।
- बंधन-समय (स्थैतिक बनाम गतिक) पूर्वतर त्रुटि-जाँच/गति का व्यापार बाद के लचीलेपन से करता है।
- अनुवाद शाब्दिक → वाक्य-रचना → शब्दार्थ विश्लेषण → मध्यवर्ती कोड → अनुकूलन → कोड सर्जन क्रम में चलता है; संकलक स्वतंत्र लक्ष्य-कोड उत्पन्न करता है, निर्वचक सीधे निष्पादित करता है।
- सरणी, रिकॉर्ड, यूनियन व संकेतक — अदिश प्रकारों से बनी चार संयुक्त-प्रकार रचनाएँ हैं।
- स्थैतिक/गतिक टाइपिंग (कब जाँचा जाता है) व सुदृढ़/दुर्बल टाइपिंग (क्या अंतर्निहित असुरक्षित रूपांतरण अनुमत हैं) स्वतंत्र अक्ष हैं — इन्हें मिलाएँ नहीं।
अभ्यास प्रश्न (8)
उत्तर खोलने से पहले प्रत्येक प्रश्न हल करें। हर व्याख्या सही विकल्प के साथ लुभावना गलत विकल्प भी बताती है, क्योंकि अंक वहीं जाते हैं।
फलनात्मक प्रोग्रामिंग प्रतिमान मुख्यतः इससे अभिलक्षित है:
उत्तर देखें
उत्तर: A — दुष्प्रभाव-रहित गणितीय फलनों के मूल्यांकन के रूप में गणना, बिना किसी परिवर्तनशील स्थिति के
हास्केल जैसी फलनात्मक भाषाएँ बिना परिवर्तनशील स्थिति के फलन-अनुप्रयोग के रूप में गणना प्रतिरूपित करती हैं; अन्य तीन विकल्प क्रमशः आदेशात्मक, तर्क व (फिर) आदेशात्मक शैलियाँ वर्णित करते हैं।वस्तु के वास्तविक (गतिक) प्रकार के आधार पर रन-समय पर अपने वास्तविक लक्ष्य में हल हुई आभासी विधि-कॉल इसका उदाहरण है:
उत्तर देखें
उत्तर: A — गतिक (विलंबित) बंधन
कौन सी विधि-वस्तु वस्तुतः चलेगी, यह निर्णय रन-समय तक टाला जाता है और वस्तु के गतिक प्रकार पर निर्भर करता है — यही गतिक (विलंबित) बंधन की परिभाषित विशेषता है, संकलन-समय पर स्थिर निर्णय के विपरीत।मानक अनुवाद-पाइपलाइन में, कौन-सा चरण टोकन-प्रवाह से पार्स/वाक्य-रचना वृक्ष बनाता है?
उत्तर देखें
उत्तर: A — वाक्य-रचना विश्लेषण (पार्सिंग)
शाब्दिक विश्लेषण वह टोकन-प्रवाह उत्पन्न करता है जिसे वाक्य-रचना विश्लेषण फिर व्याकरण से जाँचता है, वह पार्स वृक्ष बनाते हुए जिसे बाद के चरण उपयोग करते हैं — यह क्रम इसलिए स्थिर है कि पार्सिंग को कच्चे अक्षरों के बजाय टोकन चाहिए।यूनियन आँकड़ा-प्रकार रिकॉर्ड (स्ट्रक्ट) से मुख्यतः इस प्रकार भिन्न है:
उत्तर देखें
उत्तर: A — यूनियन के सभी क्षेत्र उसी स्मृति पर अध्यारोपित होते हैं, एक समय केवल एक वैध मान रखते हुए
रिकॉर्ड हर क्षेत्र हेतु एक साथ पृथक भंडारण आवंटित करता है; यूनियन अपने सबसे बड़े क्षेत्र हेतु पर्याप्त भंडारण आवंटित करता है और हर क्षेत्र को उसी भंडारण पर अध्यारोपित करता है, अतः किसी भी क्षण केवल एक क्षेत्र सार्थक रूप से वैध होता है — सामान्यतः पृथक विवेचक से ट्रैक किया गया।पायथन को प्रायः गतिक-रूप से टाइप्ड पर सुदृढ़-रूप से टाइप्ड वर्णित किया जाता है। इसका अर्थ है:
उत्तर देखें
उत्तर: A — प्रकार रन-समय पर जाँचे जाते हैं, और भाषा असंगत प्रकारों के बीच अर्थ-बदलने वाले रूपांतरणों को चुपचाप अनुमति नहीं देती
स्थैतिक/गतिक (कब जाँचा जाता है) व सुदृढ़/दुर्बल (क्या असुरक्षित अंतर्निहित रूपांतरण अनुमत हैं) स्वतंत्र अक्ष हैं; पायथन पहले पर विलंबित (गतिक) व दूसरे पर कड़ा (सुदृढ़) है।Java आभासी मशीन का बाइटकोड अनुदेश-समुच्चय इसका उदाहरण है:
उत्तर देखें
उत्तर: A — आभासी कंप्यूटर — वह मशीन जिसके विरुद्ध भाषा का शब्दार्थ परिभाषित है
बाइटकोड किसी भौतिक CPU के बजाय JVM सॉफ़्टवेयर से निष्पादित होता है, जो ठीक वही है जो उसी संकलित .class फ़ाइल को JVM वाली किसी भी मशीन पर बिना संशोधन चलने देता है — आभासी कंप्यूटर की परिभाषा।निम्नलिखित में कौन अदिश (आद्य) आँकड़ा-प्रकारों के उदाहरण हैं? (एक से अधिक विकल्प सही हो सकते हैं।)
उत्तर देखें
उत्तर: A — पूर्णांक; B — बूलियन
पूर्णांक व बूलियन में प्रत्येक सीधे एक मान रखता है। सरणी व रिकॉर्ड दोनों अदिशों से बने संयुक्त प्रकार हैं — सरणी सजातीय सूचकांकित संग्रह है, रिकॉर्ड विजातीय नामित-क्षेत्र संग्रह।प्रोग्रामिंग-भाषा कार्यान्वयन के उस घटक का नाम बताइए जो स्रोत-कोड (या मध्यवर्ती रूप) को पहले स्वतंत्र लक्ष्य-कोड प्रोग्राम बनाए बिना कथन-दर-कथन निष्पादित करता है।
संख्यात्मक उत्तर — मान टाइप करें।
उत्तर देखें
उत्तर: interpreter
निर्वचक हर कथन को बारी-बारी पढ़ता व निष्पादित करता है, संकलक के विपरीत, जो किसी भी निष्पादन के आरंभ होने से पहले पूरे प्रोग्राम को लक्ष्य-कोड में अनुवादित करता है।