Shift-reduce parser
एक शिफ्ट-रिड्यूस पार्सर कंप्यूटर भाषाओं और औपचारिक रूप से एक व्याकरण द्वारा परिभाषित अन्य संकेतनों के लिए कुशल, टेबल-संचालित बॉटम-अप पार्सिंग विधियों का एक वर्ग है। प्रोग्रामिंग भाषाओं को विश्लेषित करने के लिए सबसे अधिक उपयोग की जाने वाली पार्सिंग विधियाँ, एल. आर. पार्सिंग और इसकी विविधताएँ, शिफ्ट-रिड्यूस विधियाँ हैं। एल. आर. पार्सिंग के आविष्कार से पहले उपयोग किए जाने वाले वरीयता पार्सर भी शिफ्ट-रिड्यूस विधियाँ हैं। सभी शिफ्ट-रिड्यूस पार्सरों के समान बाहरी प्रभाव होते हैं, वृद्धिशील क्रम में जिसमें वे एक पार्स ट्री का निर्माण करते हैं या विशिष्ट आउटपुट क्रियाओं को कॉल करते हैं। अवलोकन एक शिफ्ट-रिड्यूस पार्सर बिना बैक अप लिए, पाठ के ऊपर एक फॉरवर्ड पास में इनपुट पाठ को स्कैन और पार्स करता है। पार्सर बिना अनुमान लगाए या पीछे हटे, पार्स ट्री को वृद्धिशील रूप से, नीचे से ऊपर और बाएं से दाएं बनाता है। इस पास के प्रत्येक बिंदु पर, पार्सर ने इनपुट पाठ के सबट्री या वाक्यांशों की एक सूची जमा की है जिन्हें पहले ही पार्स किया जा चुका है। उन सबट्री को अभी तक एक साथ नहीं जोड़ा गया है क्योंकि पार्सर अभी तक वाक्यविन्यास पैटर्न के दाहिने छोर तक नहीं पहुंचा है जो उन्हें जोड़ देगा। स्ट्रिंग ए = बी + सी * 2 पर विचार करें। उदाहरण में चरण 7 पर, केवल "ए = बी +" को पार्स किया गया है। पार्स पेड़ का केवल छायांकित निचला-बाएँ कोना मौजूद है। 8 और उससे ऊपर की संख्या वाले पार्स ट्री नोड्स में से कोई भी अभी तक मौजूद नहीं है। नोड 1,2,6 और 7 सभी वस्तुओं को कवर करने वाले अलग-अलग उप-वृक्षों के मूल हैं। नोड 1 चर ए है, नोड 2 परिसीमा = है, नोड 6 योग बी है, और नोड 7 प्रचालक + है। ये चार रूट नोड्स अस्थायी रूप से एक पार्स स्टैक में रखे जाते हैं। इनपुट स्ट्रीम का शेष अव्यक्त भाग "सी * 2" है। एक शिफ्ट-रिड्यूस पार्सर शिफ्ट चरणों और रिड्यूस चरणों के कुछ संयोजन करके काम करता है, इसलिए इसका नाम पड़ा है। एक शिफ्ट चरण एक प्रतीक द्वारा इनपुट स्ट्रीम में आगे बढ़ता है। वह स्थानांतरित प्रतीक एक नया एकल-नोड पार्स ट्री बन जाता है। एक रिड्यूस स्टेप हाल के कुछ पार्स पेड़ों पर एक पूर्ण व्याकरण नियम लागू करता है, जो उन्हें एक नए जड़ प्रतीक के साथ एक पेड़ के रूप में जोड़ता है। पार्सर इन चरणों के साथ तब तक जारी रहता है जब तक कि सभी इनपुट का उपभोग नहीं हो जाता है और सभी पार्स ट्री को एक एकल ट्री में बदल दिया जाता है जो एक संपूर्ण कानूनी इनपुट का प्रतिनिधित्व करता है। वृक्ष निर्माण के चरण प्रत्येक पार्स चरण में, पूरे इनपुट पाठ को पार्स स्टैक, वर्तमान लुकहेड प्रतीक और शेष बिना स्कैन किए हुए पाठ में विभाजित किया जाता है। पार्सर की अगली कार्रवाई सबसे दाहिने स्टैक प्रतीक (ओं) और लुकहेड प्रतीक द्वारा निर्धारित की जाती है। कार्रवाई को एक तालिका से पढ़ा जाता है जिसमें स्टैक और लुकहेड प्रतीकों के सभी वाक्यात्मक रूप से मान्य संयोजन होते हैं। एक सरल उदाहरण देखें। व्याकरण इनपुट भाषा के लिए पैटर्न या वाक्यविन्यास नियमों का समूह है। यह सभी भाषा नियमों को शामिल नहीं करता है, जैसे कि संख्याओं का आकार, या पूरे कार्यक्रम के संदर्भ में नामों और उनकी परिभाषाओं का लगातार उपयोग। शिफ्ट-रिड्यूस पार्सर एक संदर्भ-मुक्त व्याकरण का उपयोग करते हैं जो केवल प्रतीकों के स्थानीय पैटर्न से संबंधित है। ए = बी + सी * 2 से मेल खाने में सक्षम जावा या सी भाषा के एक छोटे से उपसमुच्चय के रूप में एक उदाहरण व्याकरण हो सकता हैः असाइन-आई. डी. = सम-सम-सम + उत्पाद-सम-उत्पाद-मूल्य उत्पाद-मूल्य मूल्य-आई. डी. व्याकरण के अंतिम प्रतीक एक शाब्दिक स्कैनर द्वारा इनपुट स्ट्रीम में पाए जाने वाले बहु-वर्ण प्रतीक या 'टोकन' हैं। यहाँ इनमें किसी भी पूर्णांक स्थिरांक के लिए = + * और पूर्णांक, और किसी भी पहचानकर्ता नाम के लिए आईडी शामिल हैं। व्याकरण इस बात की परवाह नहीं करता है कि इंट मान या आईडी वर्तनी क्या है, न ही यह रिक्त स्थान या लाइन ब्रेक की परवाह करता है। व्याकरण इन अंतिम प्रतीकों का उपयोग करता है लेकिन उन्हें परिभाषित नहीं करता है। वे हमेशा पार्स पेड़ के निचले झाड़ीदार छोर पर होते हैं। सम जैसे बड़े अक्षर वाले शब्द अंतहीन प्रतीक हैं। ये भाषा में अवधारणाओं या प्रतिरूपों के नाम हैं। उन्हें व्याकरण में परिभाषित किया गया है और वे कभी भी इनपुट स्ट्रीम में नहीं आते हैं। वे हमेशा पार्स पेड़ के नीचे होते हैं। वे केवल कुछ व्याकरण नियम लागू करने वाले पार्सर के परिणामस्वरूप होते हैं। कुछ नॉन-टर्मिनल को दो या दो से अधिक नियमों के साथ परिभाषित किया जाता है; ये वैकल्पिक पैटर्न हैं। नियम स्वयं को संदर्भित कर सकते हैं। यह व्याकरण बार-बार गणित संचालकों को संभालने के लिए पुनरावर्ती नियमों का उपयोग करता है। पूर्ण भाषाओं के लिए व्याकरण सूचियों, कोष्ठकबद्ध अभिव्यक्तियों और नेस्टेड बयानों को संभालने के लिए पुनरावर्ती नियमों का उपयोग करते हैं। किसी भी कंप्यूटर भाषा को कई अलग-अलग व्याकरणों द्वारा वर्णित किया जा सकता है। शिफ्ट-रिड्यूस पार्सर के लिए व्याकरण स्पष्ट होना चाहिए, या टाई-ब्रेकिंग वरीयता नियमों द्वारा संवर्धित किया जाना चाहिए। इसका मतलब है कि भाषा के दिए गए कानूनी उदाहरण पर व्याकरण को लागू करने का केवल एक ही सही तरीका है, जिसके परिणामस्वरूप एक अद्वितीय पार्स ट्री और उस उदाहरण के लिए शिफ्ट/रिड्यूस क्रियाओं का एक अनूठा अनुक्रम है। एक तालिका-संचालित पार्सर के पास व्याकरण के बारे में अपना सारा ज्ञान होता है जिसे पार्सर टेबल नामक अपरिवर्तनीय डेटा में कूटबद्ध किया जाता है। पार्सर का प्रोग्राम कोड एक सरल सामान्य लूप है जो कई व्याकरणों और भाषाओं पर अपरिवर्तित रूप से लागू होता है। वरीयता विधियों के लिए तालिकाओं को हाथ से तैयार किया जा सकता है। एल. आर. विधियों के लिए, जटिल तालिकाओं को यांत्रिक रूप से बाइसन जैसे कुछ पार्सर जनरेटर उपकरण द्वारा व्याकरण से प्राप्त किया जाता है। पार्सर टेबल आमतौर पर व्याकरण की तुलना में बहुत बड़े होते हैं। अन्य पार्सरों में जो टेबल-संचालित नहीं हैं, जैसे कि पुनरावर्ती वंश, प्रत्येक भाषा निर्माण को एक अलग सबरूटीन द्वारा पार्स किया जाता है, जो उस एक निर्माण के वाक्यविन्यास के लिए विशिष्ट होता है। पार्सर क्रियाएँ शिफ्ट-रिड्यूस पार्सर कुशल है क्योंकि इसमें कोई समर्थन शामिल नहीं है। इसका कुल निष्पादन समय इनपुट की लंबाई और पूर्ण पार्स ट्री के आकार के साथ रैखिक रूप से मापा जाता है। अन्य पार्सर विधियाँ जो पीछे हटती हैं, जब वे बुरी तरह से अनुमान लगाते हैं तो घातीय समय लग सकता है। अनुमान लगाने से बचने के लिए, शिफ्ट-रिड्यूस पार्सर अक्सर पहले स्कैन किए गए प्रतीकों के साथ क्या करना है, यह तय करने से पहले अगले स्कैन किए गए प्रतीक पर आगे (बाएं से दाएं पाठ में दाईं ओर) देखता है। लेक्सिकल स्कैनर एक प्रतीक को बाकी पार्सर से आगे काम करता है। लुकहेड प्रतीक को प्रत्येक पार्सिंग निर्णय के लिए 'दाहिने हाथ का संदर्भ' भी कहा जाता है। (शायद ही कभी, दो या दो से अधिक लुकहेड प्रतीकों का उपयोग किया जा सकता है, हालांकि अधिकांश व्यावहारिक व्याकरण को एक लुकहेड प्रतीक का उपयोग करने के लिए डिज़ाइन किया जा सकता है।) एक शिफ्ट-रिड्यूस पार्सर तब तक प्रतीक्षा करता है जब तक कि यह संयुक्त निर्माण के लिए प्रतिबद्ध होने से पहले किसी निर्माण के सभी हिस्सों को स्कैन और पार्स नहीं कर लेता है। पार्सर तब आगे प्रतीक्षा करने के बजाय संयोजन पर तुरंत कार्य करता है। ऊपर दिए गए पार्स ट्री के उदाहरण में, पार्स ट्री के उन हिस्सों को व्यवस्थित करने के लिए अधिक समय तक प्रतीक्षा करने के बजाय, वाक्यांश बी मूल्य तक कम हो जाता है और फिर 3 से 6 चरणों में उत्पाद और योग तक कम हो जाता है। बी को कैसे संभालना है, यह निर्णय केवल उस पर आधारित है जो पार्सर और स्कैनर ने पहले ही देख लिया है, उन चीजों पर विचार किए बिना जो बहुत बाद में दाईं ओर दिखाई देती हैं। कटौती सबसे हाल ही में पार्स की गई चीजों को पुनर्गठित करती है, जो कि लुकहेड प्रतीक के तुरंत बाईं ओर होती हैं। तो पहले से ही पार्स की गई चीजों की सूची एक ढेर की तरह काम करती है। यह पार्स स्टैक दाहिनी ओर बढ़ता है। स्टैक का आधार या निचला भाग बाईं ओर होता है और इसमें सबसे बाईं ओर, सबसे पुराना पार्स टुकड़ा होता है। प्रत्येक कटौती चरण केवल सबसे दाहिने, नवीनतम पार्स टुकड़ों पर कार्य करता है। (यह संचयी पार्स स्टैक ऊपर-नीचे पार्सर द्वारा उपयोग किए जाने वाले भविष्यसूचक, बाईं ओर बढ़ने वाले पार्स स्टैक से बहुत अलग है।) जब एक व्याकरण नियम जैसे उत्पाद उत्पाद * मूल्य लागू किया जाता है, तो स्टैक टॉप पार्स ट्री को धारण करता है। "उत्पाद * मूल्य"। नियम के दाहिने हाथ की ओर के इस उदाहरण को हैंडल कहा जाता है। रिड्यूस स्टेप हैंडल "प्रोडक्ट्स * वैल्यू" को लेफ्ट हैंड साइड नॉन टर्मिनल से बदल देता है, इस मामले में एक बड़ा उत्पाद। यदि पार्सर पूर्ण पार्स ट्री का निर्माण करता है, तो आंतरिक उत्पादों के लिए तीन ट्री, *, और मूल्य को बड़े उत्पादों के लिए एक नए ट्री रूट द्वारा जोड़ा जाता है। अन्यथा, आंतरिक उत्पादों और मूल्य से शब्दार्थ विवरण कुछ बाद के संकलक पास में आउटपुट होते हैं, या संयुक्त होते हैं और नए उत्पाद प्रतीक में सहेजे जाते हैं। पार्सर पार्स स्टैक के शीर्ष पर कटौती लागू करता रहता है जब तक कि वह व्याकरण नियमों के नए पूर्ण उदाहरण ढूंढता रहता है। जब कोई और नियम लागू नहीं किए जा सकते हैं, तो पार्सर फिर लुकहेड प्रतीक को पार्स स्टैक पर स्थानांतरित कर देता है, एक नया लुकहेड प्रतीक स्कैन करता है, और फिर से प्रयास करता है। शिफ्ट-रिड्यूस पार्सर्स के प्रकार पार्सर तालिकाएँ दिखाती हैं कि शीर्षतम पार्स स्टैक प्रतीकों और लुकहेड प्रतीक के प्रत्येक कानूनी संयोजन के लिए आगे क्या करना है। वह अगली कार्रवाई अद्वितीय होनी चाहिए; या तो शिफ्ट करें, या कम करें, लेकिन दोनों नहीं। (यह व्याकरण पर कुछ और सीमाओं का संकेत देता है, जो स्पष्ट होने से परे है।) विभिन्न प्रकार के शिफ्ट-रिड्यूस पार्सर्स के बीच तालिका का विवरण बहुत भिन्न होता है। अग्रता पार्सर में, हैंडल का दाहिना छोर शीर्ष स्टैक प्रतीकों के अग्रता स्तर या व्याकरण की जकड़न की तुलना लुकहेड प्रतीक से करके पाया जाता है। उपरोक्त उदाहरण में, इंट और आईडी कथन परिसीमक की तुलना में आंतरिक व्याकरण स्तरों से संबंधित हैं। इसलिए इंट और आईडी दोनों को; की तुलना में उच्च प्राथमिकता माना जाता है और जब भी इसका पालन किया जाए तो इसे कुछ और कर दिया जाना चाहिए। वरीयता पार्सर की विभिन्न किस्में हैं, जिनमें से प्रत्येक में हैंडल के बाएं छोर को खोजने और लागू करने के लिए सही नियम चुनने के अलग-अलग तरीके हैंः ऑपरेटर-प्रेसीडेंस पार्सर, एक बहुत ही सरल संख्यात्मक विधि है जो अभिव्यक्तियों के लिए काम करती है लेकिन सामान्य प्रोग्राम वाक्यविन्यास के लिए नहीं। सरल प्राथमिकता पार्सर, दाएँ और बाएँ छोरों को खोजने के लिए एक बड़ी एमएक्सएन तालिका का उपयोग करता है। पीएल360 में उपयोग किया जाता है। सामान्य प्रोग्रामिंग भाषाओं को नहीं संभालता है। कमजोर प्राथमिकता पार्सर, केवल हैंडल के दाहिने छोर को खोजने के लिए प्राथमिकता तालिका का उपयोग करता है। सरल वरीयता की तुलना में अधिक व्याकरण को संभालता है। विस्तारित प्राथमिकता पार्सर। मिश्रित रणनीति वरीयता पार्सर, एक्स. पी. एल. के मूल संस्करण द्वारा उपयोग किया जाता है। "ट्रिपल" को शामिल करने के लिए, किसी भी प्राथमिकता पहचानने वाले में निहित "डबल्स" का विस्तार करता है। एस. एल. आर. से कम शक्तिशाली। आम तौर पर अपेक्षाकृत छोटी भाषाओं के लिए भी बहुत बड़ी तालिकाएँ होती हैं जैसे कि एक्स. पी. एल. स्वयं कई "ट्रिपल" के कारण जो वरीयता विधियों द्वारा लगाई गई सीमाओं के बाहर व्याकरण को पहचानने के लिए आवश्यक हैं। वरीयता पार्सर उन व्याकरणों में सीमित हैं जिन्हें वे संभाल सकते हैं। निर्णय लेते समय वे अधिकांश पार्स स्टैक को अनदेखा कर देते हैं। वे केवल सर्वोच्च प्रतीकों के नामों पर विचार करते हैं, न कि व्याकरण में वे प्रतीक अब कहाँ दिखाई दे रहे हैं, इसके पूर्ण संदर्भ पर। वरीयता के लिए आवश्यक है कि समान दिखने वाले प्रतीक संयोजनों को पूरे व्याकरण में समान तरीकों से विश्लेषित और उपयोग किया जाना चाहिए, हालांकि वे संयोजन संदर्भ की परवाह किए बिना होते हैं। एल. आर. पार्सर शिफ्ट-रिड्यूस पार्सिंग का एक अधिक लचीला रूप है, जो कई और व्याकरणों को संभालता है। एल. आर. पार्सर प्रोसेसिंग एल. आर. पार्सर एक स्टेट मशीन की तरह काम करते हैं, जो प्रत्येक पारी के लिए एक स्टेट ट्रांजिशन या रिड्यूस एक्शन करते हैं। ये एक ढेर को नियोजित करते हैं जहाँ वर्तमान स्थिति को शिफ्ट क्रियाओं द्वारा (नीचे) धकेल दिया जाता है। इस ढेर को फिर कम क्रियाओं द्वारा पॉप (ऊपर) किया जाता है। यह तंत्र एल. आर. पार्सर को सभी नियतात्मक संदर्भ-मुक्त व्याकरण को संभालने की अनुमति देता है, जो वरीयता व्याकरण का एक सुपरसेट है। एल. आर. पार्सर पूरी तरह से कैनोनिकल एल. आर. पार्सर द्वारा लागू किया जाता है। लुक-हेड एल. आर. और सिंपल एल. आर. पार्सर इसके सरलीकृत रूपों को लागू करते हैं जिनसे स्मृति आवश्यकताओं में काफी कमी आई है। हाल के शोध ने उन तरीकों की पहचान की है जिनके द्वारा कैनॉनिकल एलआर पार्सर को क्नुथ के टेबल-बिल्डिंग एल्गोरिदम पर नाटकीय रूप से कम टेबल आवश्यकताओं के साथ लागू किया जा सकता है। चाहे एल. आर. हो, एल. ए. एल. आर. हो या एस. एल. आर., मूल अवस्था मशीन समान है; केवल तालिकाएँ अलग-अलग होती हैं, और ये तालिकाएँ लगभग हमेशा यांत्रिक रूप से उत्पन्न होती हैं। इसके अतिरिक्त, इन तालिकाओं को आमतौर पर इस तरह से लागू किया जाता है कि एक आर. ई. डी. यू. सी. ई. के परिणामस्वरूप एक बंद सबरूटीन को कॉल किया जाता है जो स्टेट मशीन के लिए बाहरी है और जो एक कार्य करता है जो व्याकरण नियम के शब्दार्थ द्वारा निहित है जिसे आर. ई. डी. यू. सी. एड किया जा रहा है। इसलिए, पार्सर को एक अपरिवर्तनीय अवस्था मशीन भाग और एक भिन्न शब्दार्थ भाग में विभाजित किया जाता है। यह मौलिक अंतर उच्च गुणवत्ता वाले पार्सर के विकास को प्रोत्साहित करता है जो असाधारण रूप से विश्वसनीय हैं। एक विशिष्ट स्टैक अवस्था और लुकहेड प्रतीक को देखते हुए, सटीक रूप से चार संभावित क्रियाएँ हैं, त्रुटि, स्थानांतरण, कटौती और रोक (इसके बाद विन्यास के रूप में संदर्भित)। एक विन्यास में एक बिंदु की उपस्थिति वर्तमान लुकहेड स्थिति का प्रतिनिधित्व करती है, जिसमें लुकहेड प्रतीक बिंदु के दाईं ओर दिखाया गया है (और जो हमेशा एक अंतिम प्रतीक से मेल खाता है), और वर्तमान स्टैक स्थिति बिंदु के बाईं ओर (और जो आमतौर पर एक गैर-अंतिम प्रतीक से मेल खाती है)। उच्च प्रदर्शन सहित व्यावहारिक कारणों के लिए, तालिकाओं को आमतौर पर दो-बिट प्रतीकों की कुछ बड़ी, सहायक सरणी द्वारा विस्तारित किया जाता है, जो स्पष्ट रूप से चार दो-बिट प्रतीकों में संपीड़ित होते हैं, एक बाइट, जो कि बाइट-उन्मुख मशीनों पर कुशल पहुंच के लिए होता है, जिसे अक्सर इस प्रकार कूटबद्ध किया जाता हैः 00b त्रुटि का प्रतिनिधित्व करता है 01b का प्रतिनिधित्व करता है शिफ्ट 10b का प्रतिनिधित्व करता है 11b का प्रतिनिधित्व करता है स्टॉप (स्टॉप का एक विशेष मामला है)। पूरी सरणी में आम तौर पर ज्यादातर त्रुटि विन्यास, शिफ्ट और रिड्यूस विन्यास की व्याकरण-परिभाषित संख्या और एक स्टॉप विन्यास शामिल होता है। चतुर्थक संख्या प्रणाली (आधार 4, दो बिट प्रति चतुर्थक अंक) में मूल्यों के विनिर्देशन का समर्थन करने वाली प्रोग्रामिंग प्रणालियों में, जैसे कि एक्स. पी. एल., इन्हें इस प्रकार कूटबद्ध किया जाता है, उदाहरण के लिएः "(2). 0". त्रुटि का प्रतिनिधित्व करता है "(2). 1". शिफ्ट का प्रतिनिधित्व करता है "(2). 2". रिड्यूस का प्रतिनिधित्व करता है "(2). 3". स्टॉप का प्रतिनिधित्व करता है शिफ्ट और रिड्यूस टेबल को सरणी से अलग से लागू किया जाता है। सहायक सरणी केवल वर्तमान स्थिति और लुकहेड प्रतीक के लिए "जांच" की जाती है। (सहायक) सरणी "पूर्ण" है, जबकि (शिफ्ट और रिड्यूस) टेबल वास्तव में बहुत "विरल" हो सकते हैं, और उन शिफ्ट और रिड्यूस टेबल (त्रुटि और स्टॉप को किसी टेबल की आवश्यकता नहीं है) के इष्टतम "अपघटन" के माध्यम से महत्वपूर्ण दक्षता प्राप्त की जा सकती है। शिफ्ट-रिड्यूस पार्सर की मूल परिभाषा से, शिफ्ट और रिड्यूस विन्यास स्पष्ट हैं। STOP, तब, एक विन्यास का प्रतिनिधित्व करता है जहां स्टैक के शीर्ष पर स्थिति और लुकहेड टर्मिनल प्रतीक विषय व्याकरण के भीतर होता है, और प्रोग्राम के अंत का प्रतिनिधित्व करता हैः δ <प्रोग्राम> δ अंतिम δ से आगे शिफ्ट करना असंभव है ताकि अवधारणात्मक रूप से δ <प्रोग्राम> δ> त्रुटि, फिर, एक विन्यास का प्रतिनिधित्व करता है जहां स्टैक के शीर्ष पर स्थिति, और लुकहेड टर्मिनल प्रतीक विषय व्याकरण के भीतर नहीं है। यह एक त्रुटि पुनर्प्राप्ति प्रक्रिया को लागू करने का अवसर प्रस्तुत करता है, शायद, अपने सबसे सरल रूप में, लुकहेड टर्मिनल प्रतीक को त्यागने और अगले टर्मिनल प्रतीक को पढ़ने के लिए, लेकिन कई अन्य क्रमादेशित क्रियाएं संभव हैं, जिनमें स्टैक की छंटाई, या लुकहेड टर्मिनल प्रतीक को त्यागना और स्टैक की छंटाई शामिल है (और एक पैथोलॉजिकल मामले में, आमतौर पर यह प्राप्त करना संभव है जहां <प्रोग्राम> में केवल एक "नल स्टेटमेंट" होता है)। ज्यादातर मामलों में, स्टैक को उद्देश्यपूर्ण रूप से पहले से लोड किया जाता है, यानी, आरंभ किया जाता है, δ • <प्रोग्राम> δ के साथ जिससे प्रारंभिक δ को पहले से ही पहचाना जा चुका है। यह, तब, कार्यक्रम की शुरुआत का प्रतिनिधित्व करता है, और इस प्रकार, एक अलग START विन्यास होने से बचता है, जो कि, वैचारिक रूप से एक विशेष छद्म-टर्मिनल प्रतीक है जिसे यांत्रिक रूप से व्याकरण में जोड़ा जाता है, जैसे कि <प्रोग्राम> एक विशेष छद्म-गैर-टर्मिनल प्रतीक है जिसे यांत्रिक रूप से व्याकरण में जोड़ा जाता है (यदि प्रोग्रामर ने स्पष्ट रूप से <प्रोग्राम> को व्याकरण में शामिल नहीं किया है, तो <प्रोग्राम> स्वचालित रूप से प्रोग्रामर की ओर से व्याकरण में जोड़ा जाएगा)। स्पष्ट रूप से, इस तरह के पार्सर में सटीक रूप से एक (अंतर्निहित) स्टार्ट कॉन्फ़िगरेशन और एक (स्पष्ट) स्टॉप कॉन्फ़िगरेशन होता है, लेकिन यह कर सकता है, और आमतौर पर इसमें सैकड़ों शिफ्ट और रिड्यूस कॉन्फ़िगरेशन और शायद हजारों त्रुटि कॉन्फ़िगरेशन होते हैं। संदर्भ पार्सिंग एल्गोरिदम