सिंटैक्स-निर्देशित अनुवाद, रनटाइम परिवेश व मध्यवर्ती कोड
int a, b, c में प्रकार शीर्ष पर बैठता है और उसे प्रत्येक नाम तक नीचे धकेलना पड़ता है। यह इसलिए महत्वपूर्ण है कि एक स्वच्छ नियम है: जिस व्याकरण के सभी गुण संश्लेषित हों वह S-गुणित है और LR पार्सिंग के दौरान बिना अतिरिक्त पास मूल्यांकित हो सकता है, जबकि आरोपित गुणों को एक बाएँ-से-दाएँ बहाव में मूल्यांकनीय होने हेतु L-गुणित अनुशासन चाहिए — प्रत्येक केवल जनक तथा अपने बाईं ओर के सहोदरों पर निर्भर। तत्पश्चात् रनटाइम परिवेश उत्तर देता है कि प्रोग्राम चलते समय नाम कहाँ रहता है, और परीक्षणीय विषय-वस्तु लगभग पूर्णतः सक्रियण अभिलेखों तथा उसके विषय में है जो पुनरावर्तन को काम करने देता है: प्रत्येक कॉल को स्टैक पर अपना फ़्रेम मिलता है, अतः प्रत्येक पुनरावर्ती आह्वान के पास स्थानीय चरों की अपनी प्रतिलिपि होती है, और फ़्रेम वही है जिसमें संचित प्रतिवापसी पता व बुलाने वाले का फ़्रेम संकेतक रहते हैं। मध्यवर्ती कोड वहाँ है जहाँ अंक गणना पर लौट आते हैं। त्रि-पता कोड प्रत्येक अनुदेश को अधिकतम एक संकारक देता है, अतः व्यंजक अस्थायी चरों को निर्दिष्टीकरणों का अनुक्रम बन जाता है, और प्रश्न दो बातें पूछते हैं: उसमें कितने अनुदेश लगते हैं और उसे मूल्यांकित करने हेतु कितने रजिस्टर चाहिए — और दूसरे का उत्तर लोगों को चकित करता है, क्योंकि संतुलित व्यंजक वृक्ष को गहरे असम वृक्ष से अधिक रजिस्टर चाहिए।संश्लेषित, आरोपित, तथा कौन-सा पार्सर सँभाल सकता है
| पक्ष | संश्लेषित | आरोपित |
|---|---|---|
| किससे निकाला जाता | शीर्ष की संतानें | जनक या वाम सहोदर |
| मूल्यांकन क्रम | नीचे-से-ऊपर, एक पास | ऊपर-से-नीचे या बाएँ-से-दाएँ |
| सामान्य उदाहरण | व्यंजक का मान या प्रकार | प्रत्येक नाम पर धकेला घोषित प्रकार |
| व्याकरण वर्ग | S-गुणित | L-गुणित, यदि प्रत्येक केवल बाईं ओर पर निर्भर हो |
| LR पार्सिंग के दौरान मूल्यांकनीय? | हाँ — प्रत्येक न्यूनन पर | सामान्यतः नहीं |
सक्रियण अभिलेख, तथा पुनरावर्तन को क्या काम करने देता है
प्रत्येक कॉल एक सक्रियण अभिलेख — फ़्रेम — पुश करता है जिसमें प्राचल, स्थानीय चर, संचित प्रतिवापसी पता तथा बुलाने वाले के फ़्रेम की कड़ी होती है। पुनरावर्तन के पीछे सम्पूर्ण तंत्र वही है: पुनरावर्ती कॉल को नया फ़्रेम मिलता है, अतः उसके स्थानीय चर नए व बुलाने वाले से स्वतंत्र होते हैं, और प्रतिवापसी फ़्रेम पॉप करके बुलाने वाले का दृश्य पुनःस्थापित करती है। स्थैतिक आवंटन यह नहीं कर सकता, क्योंकि प्रति चर एक नियत स्थान प्रत्येक आह्वान द्वारा साझा होता, और इसीलिए स्टैक अनुशासन से रहित भाषाएँ पुनरावर्तन का समर्थन नहीं कर सकतीं।
त्रि-पता कोड, गिना गया
| भोला | CSE के पश्चात् |
|---|---|
t1 = b * c | t1 = b * c |
t2 = b * c | t2 = t1 + t1 |
t3 = t1 + t2 | t3 = t2 - d |
t4 = t3 - d | a = t3 |
a = t4 | — |
| 5 अनुदेश | 4 अनुदेश |
(a+b)*(c+d) — दो उपवृक्ष प्रत्येक को 2 चाहिए — को 3 रजिस्टर चाहिए, क्योंकि बायाँ पक्ष रजिस्टर में मूल्यांकित करने के पश्चात् आपको उसे धारण करना होगा जब तक दायाँ पक्ष मूल्यांकित हो, जिसे स्वयं दो चाहिए। परंतु वाम-गहन श्रृंखला ((a+b)+c)+d को केवल 2 चाहिए, क्योंकि प्रत्येक चरण पर एक प्रचालक पत्ती है और दूसरे रजिस्टर में लादकर तुरंत खपाया जा सकता है, अतः कुछ संचित नहीं होता। दोनों आँकड़े निकाले गए। शिक्षा यह है कि रजिस्टर-दबाव इससे चालित है कि कितने आंशिक परिणाम एक साथ धारण करने पड़ते हैं, जो वृक्ष के आकार के बजाय उसकी आकृति का गुण है — और इसीलिए संकलक जान-बूझकर व्यंजक का पुनःसाहचर्य कर सकता है।मुख्य बिंदु
- संश्लेषित गुण संतानों से आता है और प्रत्येक LR न्यूनन पर मूल्यांकित हो सकता है, बिना अतिरिक्त पास।
- आरोपित गुण जनक या वाम सहोदर से आता है — घोषित-प्रकार-प्रत्येक-नाम-पर वाली स्थिति।
- S-गुणित ⊂ L-गुणित; L-गुणित एक बाएँ-से-दाएँ बहाव में मूल्यांकनीय है।
- प्रत्येक कॉल को अपना सक्रियण अभिलेख मिलता है, और पुनरावर्तन के पीछे सम्पूर्ण तंत्र वही है।
- स्थैतिक विस्तार मुक्त नाम को परिवेष्टक पाठ से सुलझाता है; गतिक विस्तार कॉल स्टैक से।
- त्रि-पता कोड प्रत्येक अनुदेश को अधिकतम एक संकारक देता है, अतः व्यंजक अस्थायी चरों का अनुक्रम बन जाता है।
- a = bc + bc − d भोले रूप में 5 अनुदेश लेता है और सामान्य उप-व्यंजक हटाने पर 4।
- सेठी–उलमैन: (a+b)*(c+d) को 3 रजिस्टर चाहिए जबकि ((a+b)+c)+d को 2 — आकृति, आकार नहीं।
अभ्यास प्रश्न (8)
उत्तर खोलने से पहले प्रत्येक प्रश्न हल करें। हर व्याख्या सही विकल्प के साथ लुभावना गलत विकल्प भी बताती है, क्योंकि अंक वहीं जाते हैं।
सामान्य उप-व्यंजक हटाने के पश्चात् a = bc + bc − d हेतु कितने त्रि-पता अनुदेश आवश्यक हैं?
संख्यात्मक उत्तर — मान टाइप करें।
उत्तर देखें
उत्तर: 4
t1 = b * c,t2 = t1 + t1,t3 = t2 - d,a = t3— चार। भोला अनुवाद पाँच लेता है, क्योंकि वहb * cको दो बार पृथक् अस्थायी चरों में निकालता है। बचत ठीक एक अनुदेश की है, और यह देखना महत्वपूर्ण है कि वह कहाँ से आती है: CSE योग या घटाव नहीं हटाता, केवल उस प्रचालक की पुनर्गणना जो पहले से उपलब्ध था। 5 उत्तर देने का अर्थ है कि उन्मूलन लागू नहीं हुआ; 3 उत्तर देने का अर्थ प्रायः यह है किaमें अंतिम प्रतिलिपि छोड़ दी गई, जो त्रि-पता कोड को चाहिए ही, बशर्ते अंतिम संक्रिया सीधेaको लक्ष्य न कर सके।स्मृति में स्पिल किए बिना (a+b)*(c+d) मूल्यांकित करने हेतु न्यूनतम कितने रजिस्टर आवश्यक हैं?
संख्यात्मक उत्तर — मान टाइप करें।
उत्तर देखें
उत्तर: 3
तीन। सेठी–उलमैन नियम से पत्ती की लागत 1 है और जिस शीर्ष के उपवृक्षों की लागत a व b है उसकी लागत भिन्न होने पर max(a, b) तथा बराबर होने पर a + 1 है। यहाँ दोनों उपवृक्षों की लागत 2 है और वे बराबर हैं, अतः उत्तर 3 है:a+bको एक रजिस्टर में मूल्यांकित करें, उसे धारण करें, और दाएँ उपवृक्ष को अपने दो और चाहिए। शिक्षाप्रद तुलना वाम-गहन श्रृंखला((a+b)+c)+dहै, जिसे केवल 2 चाहिए — प्रत्येक चरण पर एक प्रचालक पत्ती है, लादा व तुरंत खपाया गया, अतः कुछ संचित नहीं होता। अतः संतुलित वृक्ष उसी आकार के असम वृक्ष से अधिक रजिस्टर लेता है, जो अधिकांश लोगों की अपेक्षा के विपरीत है और इसीलिए रजिस्टर-दबाव वृक्ष की आकृति का गुण है।केवल किसी शीर्ष की संतानों के गुणों से निकाला गया गुण है:
उत्तर देखें
उत्तर: B — संश्लेषित, और LR पार्सिंग के दौरान मूल्यांकनीय
संश्लेषित, और LR पार्सिंग के दौरान मूल्यांकनीय। LR पार्सर किसी उत्पादन का न्यूनन तभी करता है जब उसके दक्षिण पक्ष का प्रत्येक प्रतीक पूर्ण हो, अतः जनक शीर्ष के बनने के क्षण उसकी सभी संतानें समाप्त हो चुकी हैं और उनके गुण-मान स्टैक पर हैं — गणना न्यूनन क्रिया में होती है, बिना अतिरिक्त भ्रमण (जो विकल्प C को बाहर करता है)। विकल्प D उलटा है: आरोपित गुणों को जनक से या बाईं ओर से सूचना चाहिए, जो न्यूनन के समय अभी विद्यमान न हो। केवल संश्लेषित गुणों वाला व्याकरण S-गुणित कहलाता है, और S-गुणित होना नीचे-से-ऊपर पार्सिंग के दौरान एक-पास मूल्यांकन की ठीक वही शर्त है।पुनरावर्तन हेतु सक्रियण अभिलेखों का आवंटन आवश्यक है:
उत्तर देखें
उत्तर: B — स्टैक पर, प्रति कॉल एक
स्टैक पर, प्रति कॉल एक। पुनरावर्ती फलन एक साथ कई बार सक्रिय होता है, और प्रत्येक सक्रियण को अपने प्राचल व स्थानीय चर चाहिए — अतः संचयन प्रति कॉल होना चाहिए, प्रति फलन नहीं। स्थैतिक आवंटन प्रति चर एक नियत स्थान देता है, प्रत्येक आह्वान द्वारा साझा, अतः भीतरी कॉल बाहरी कॉल के स्थानीय चर अधिलिखित कर देती: ठीक इसीलिए शुद्ध स्थैतिक आवंटन वाली भाषाएँ पुनरावर्तन का समर्थन नहीं कर सकतीं, और इस प्रश्न के पीछे ऐतिहासिक बिंदु वही है। फ़्रेम संचित प्रतिवापसी पता तथा बुलाने वाले के फ़्रेम की कड़ी भी वहन करता है, और वही प्रतिवापसी को बुलाने वाले का दृश्य ठीक-ठीक पुनःस्थापित करने देता है।कोई फलन ऐसे चर को संदर्भित करता है जिसे वह घोषित नहीं करता। स्थैतिक व गतिक विस्तार वही उत्तर देते हैं जब:
उत्तर देखें
उत्तर: B — परिवेष्टक परिभाषा तथा उसे परिभाषित करता निकटतम बुलाने वाला वही हों
स्थैतिक विस्तार परिवेष्टक पाठ से बाहर की ओर देखता है; गतिक विस्तार नाम को परिभाषित करते निकटतम फ़्रेम हेतु कॉल स्टैक नीचे देखता है। जब वे दोनों संयोगवश वही घोषणा पहचानें, तो अनुशासन सहमत होते हैं — और इसीलिए अंतर केवल उस प्रोग्राम में दिखता है जो जान-बूझकर ऐसे बनाया गया हो कि बुलाने वाला परिवेष्टक विस्तार न हो। विकल्प D गलत है और देखते ही अस्वीकार करने योग्य: तुरंत परिवेष्टक फलन में घोषित उस नाम हेतु जो बुलाने वाला भी हो, दोनों तुच्छ रूप से मिलते हैं। विकल्प C सुलझाव-नियम को कार्यान्वयन रणनीति से भ्रमित करता है; स्थैतिक विस्तार भाषा का गुण है और संकलक हो या न हो, टिकता है।L-गुणित परिभाषाओं के विषय में निम्नलिखित में कौन सत्य हैं? (एक से अधिक सही हो सकते हैं।)
उत्तर देखें
उत्तर: A — प्रत्येक S-गुणित परिभाषा L-गुणित है; B — वे एक ही बाएँ-से-दाएँ भ्रमण में मूल्यांकित हो सकती हैं; D — वे ऊपर-से-नीचे पार्सिंग के लिए उपयुक्त हैं
A, B व D। S-गुणित का अर्थ है प्रत्येक गुण संश्लेषित है, जो L-गुणित शर्त को रिक्त रूप से संतुष्ट करता है — अतः A में अंतर्वेशन, और इसीलिए S-गुणित ⊂ L-गुणित। परिभाषक प्रतिबंध यह है कि प्रत्येक आरोपित गुण केवल जनक तथा कठोरतः अपनी बाईं ओर के सहोदरों पर निर्भर हो, और वही क्रम एक बाएँ-से-दाएँ बहाव उपलब्ध कराता है (B) तथा ठीक वही पूर्वानुमानी ऊपर-से-नीचे पार्सर अवतरण करते समय उत्पन्न करता है (D)। C असत्य है और स्वयं वही प्रतिबंध है: दाएँ सहोदर पर निर्भरता एक बाएँ-से-दाएँ पास में संतुष्ट नहीं हो सकती, क्योंकि उस सहोदर तक अभी पहुँचा ही नहीं गया — उसकी अनुमति देना ही दूसरा भ्रमण बाध्य करता।int a, b, c;में a, b व c में प्रत्येक तक पहुँचता घोषित प्रकार किसका उदाहरण है:उत्तर देखें
उत्तर: B — आरोपित गुण
आरोपित। प्रकारintघोषणा के शीर्ष के निकट पहचाना जाता है और उसे सूची के प्रत्येक नाम तक नीचे सौंपना पड़ता है — सूचना जनक से, या वाम सहोदर से बहती है, संतानों से ऊपर नहीं। वही आरोपित गुण की परिभाषा है, और वह पाठ्यपुस्तकीय उदाहरण ठीक इसलिए है कि संश्लेषित गुण यह नहीं कर सकता: नामों के पास अपने उपवृक्षों से प्रकार निकालने का कोई मार्ग नहीं। यही कारण भी है कि घोषणा-व्याकरण L-गुणित परिभाषाओं की मानक प्रेरणा हैं — प्रकार प्रत्येक नाम तक उसकी बाईं ओर से पहुँचता है, अतः एक बाएँ-से-दाएँ बहाव पर्याप्त है।त्रि-पता अनुदेश में अधिकतम होता है:
उत्तर देखें
उत्तर: B — एक संकारक
एक संकारक। नाम पतों की गणना करता है — प्रायः एक गंतव्य व दो प्रचालक, अतः "त्रि-पता" — संकारकों की नहीं, और एक-संकारक प्रतिबंध ही उस रूप को उपयोगी बनाता है: प्रत्येक अनुदेश एक मशीन संक्रिया पर निकटता से मानचित्रित होता है, और किसी भी गहराई का व्यंजक वृक्ष अस्थायी चरों को निर्दिष्टीकरणों का सपाट अनुक्रम बन जाता है। विकल्प A नाम का स्वाभाविक भ्रम-पाठ है और जान-बूझकर सुधारने योग्य। वही सपाटपन है जिस पर अगले अध्याय के अनुकूलन काम करते हैं: रैखिक अनुक्रम ही आपको यह पूछने देता है कि कौन-से मान उपलब्ध हैं, कौन जीवित हैं, और कौन-सी गणनाएँ दोहराई जाती हैं।