वाक्यविन्यास विश्लेषण: कंपाइलर टॉप डाउन और बॉटम अप पार्सिंग प्रकार
वाक्यविन्यास विश्लेषण क्या है?
सिंटैक्स विश्लेषण यह कंपाइलर डिज़ाइन प्रक्रिया का दूसरा चरण है जिसमें दिए गए इनपुट स्ट्रिंग को औपचारिक व्याकरण के नियमों और संरचना की पुष्टि के लिए जाँचा जाता है। यह वाक्यविन्यास संरचना का विश्लेषण करता है और जाँचता है कि दिया गया इनपुट प्रोग्रामिंग भाषा के सही वाक्यविन्यास में है या नहीं।
कंपाइलर डिज़ाइन प्रक्रिया में सिंटैक्स विश्लेषण लेक्सिकल विश्लेषण चरण के बाद आता है। इसे पार्स ट्री या सिंटैक्स ट्री के नाम से भी जाना जाता है। पार्स ट्री को भाषा के पूर्व-निर्धारित व्याकरण की मदद से विकसित किया जाता है। सिंटैक्स विश्लेषक यह भी जाँचता है कि दिया गया प्रोग्राम संदर्भ-मुक्त व्याकरण द्वारा निहित नियमों को पूरा करता है या नहीं। यदि यह संतुष्ट करता है, तो पार्सर उस स्रोत प्रोग्राम का पार्स ट्री बनाता है। अन्यथा, यह त्रुटि संदेश प्रदर्शित करेगा।
आपको सिंटैक्स विश्लेषक की आवश्यकता क्यों है?
- जाँचें कि कोड व्याकरणिक रूप से वैध है या नहीं
- वाक्यविन्यास विश्लेषक आपको कोड पर नियम लागू करने में मदद करता है
- यह सुनिश्चित करने में आपकी सहायता करता है कि प्रत्येक आरंभिक ब्रेस के पास एक संगत समापन शेष है
- प्रत्येक घोषणा का एक प्रकार होता है और वह प्रकार अवश्य मौजूद होना चाहिए
महत्वपूर्ण वाक्यविन्यास विश्लेषक शब्दावली
वाक्यविन्यास विश्लेषण प्रक्रिया में प्रयुक्त महत्वपूर्ण शब्दावलियाँ:
- वाक्य: वाक्य कुछ वर्णमाला पर अक्षरों का एक समूह है।
- लेक्समे: लेक्सीम किसी भाषा की सबसे निम्न स्तर की वाक्यात्मक इकाई होती है (जैसे, कुल, प्रारंभ)।
- टोकन: टोकन केवल लेक्सेम की एक श्रेणी है।
- कीवर्ड और आरक्षित शब्द - यह एक पहचानकर्ता है जिसका उपयोग कथन के वाक्यविन्यास के एक निश्चित भाग के रूप में किया जाता है। यह एक आरक्षित शब्द है जिसका उपयोग आप चर नाम या पहचानकर्ता के रूप में नहीं कर सकते।
- शोर शब्द - शोर शब्द वैकल्पिक होते हैं जिन्हें वाक्य की पठनीयता बढ़ाने के लिए कथन में डाला जाता है।
- टिप्पणियाँ - यह दस्तावेज़ का एक बहुत ही महत्वपूर्ण हिस्सा है। इसे ज़्यादातर /* */, या//रिक्त (स्पेस) द्वारा प्रदर्शित किया जाता है
- सीमांकक - यह एक वाक्यविन्यास तत्व है जो किसी वाक्यविन्यास इकाई की शुरुआत या अंत को चिह्नित करता है। जैसे कोई कथन या अभिव्यक्ति, “शुरू”…”अंत”, या {}।
- अक्षरों का समूह – ASCII, यूनिकोड
- Identifiers - यह लंबाई पर प्रतिबंध है जो आपको वाक्य की पठनीयता को कम करने में मदद करता है।
- Operaटोर प्रतीक – + और – दो बुनियादी अंकगणितीय ऑपरेशन करता है।
- भाषा के वाक्यविन्यास तत्व
हमें पार्सिंग की आवश्यकता क्यों है?
पार्स यह भी जांचता है कि इनपुट स्ट्रिंग अच्छी तरह से बनाई गई है, और यदि नहीं, तो उसे अस्वीकार कर देता है।
कंपाइलर डिज़ाइन में पार्सर द्वारा निष्पादित महत्वपूर्ण कार्य निम्नलिखित हैं:
- सभी प्रकार की वाक्यविन्यास त्रुटियों का पता लगाने में आपकी सहायता करता है
- वह स्थिति ज्ञात करें जहां त्रुटि हुई है
- त्रुटि का स्पष्ट एवं सटीक विवरण।
- किसी त्रुटि से पुनर्प्राप्ति जारी रखने और कोड में आगे की त्रुटियों को खोजने के लिए।
- "सही" प्रोग्रामों के संकलन को प्रभावित नहीं करना चाहिए।
- पार्स को वाक्यविन्यास त्रुटियों की रिपोर्ट करके अमान्य पाठों को अस्वीकार करना चाहिए
पार्सिंग तकनीक
पार्सिंग तकनीकों को दो अलग-अलग समूहों में विभाजित किया गया है:
- टॉप-डाउन पार्सिंग,
- बॉटम-अप पार्सिंग
टॉप-डाउन पार्सिंग
टॉप-डाउन पार्सिंग में पार्स वृक्ष का निर्माण जड़ से शुरू होता है और फिर पत्तियों की ओर बढ़ता है।
टॉप-डाउन पार्सिंग के दो प्रकार हैं:
- पूर्वानुमानित पार्सिंग:
प्रेडिक्टिव पार्स यह अनुमान लगा सकता है कि विशिष्ट इनपुट स्ट्रिंग को बदलने के लिए किस उत्पादन का उपयोग किया जाना चाहिए। प्रेडिक्टिव पार्सर लुक-अहेड पॉइंट का उपयोग करता है, जो अगले इनपुट प्रतीकों की ओर इशारा करता है। इस पार्सिंग तकनीक के साथ बैकट्रैकिंग कोई समस्या नहीं है। इसे LL(1) पार्सर के रूप में जाना जाता है
- पुनरावर्ती अवरोही पार्सिंग:
यह पार्सिंग तकनीक इनपुट को पुनरावर्ती रूप से पार्स करके एक प्रेज़ ट्री बनाती है। इसमें कई छोटे फ़ंक्शन होते हैं, व्याकरण में प्रत्येक नॉनटर्मिनल के लिए एक।
बॉटम-अप पार्सिंग
कंपाइलर डिज़ाइन में बॉटम अप पार्सिंग में, पार्स ट्री का निर्माण लीव से शुरू होता है, और फिर यह अपने रूट की ओर बढ़ता है। इसे शिफ्ट-रिड्यूस पार्सिंग भी कहा जाता है। कंपाइलर डिज़ाइन में इस प्रकार की पार्सिंग कुछ का उपयोग करके बनाई जाती है सॉफ्टवेयर उपकरण.
त्रुटि – पुनर्प्राप्ति विधियाँ
सिस्टम सॉफ़्टवेयर में पार्सिंग में होने वाली सामान्य त्रुटियाँ
- शब्द-भांडार का: ग़लत टाइप किए गए पहचानकर्ता का नाम
- वाक्य-रचना-संबंधी: असंतुलित कोष्ठक या लुप्त अर्धविराम
- अर्थगत: असंगत मान असाइनमेंट
- तार्किक: अनंत लूप और पहुंच योग्य कोड नहीं
पार्सर को प्रोग्राम में पाई गई किसी भी त्रुटि का पता लगाने और रिपोर्ट करने में सक्षम होना चाहिए। इसलिए, जब भी कोई त्रुटि होती है तो पार्सर को इसे संभालने और शेष इनपुट को पार्स करने में सक्षम होना चाहिए। एक प्रोग्राम में विभिन्न संकलन प्रक्रिया चरणों में निम्न प्रकार की त्रुटियाँ हो सकती हैं। पाँच सामान्य त्रुटि-पुनर्प्राप्ति विधियाँ हैं जिन्हें पार्सर में लागू किया जा सकता है
कथन मोड पुनर्प्राप्ति
- जब पार्सर को कोई त्रुटि मिलती है, तो यह आपको सुधारात्मक कदम उठाने में मदद करता है। यह बाकी इनपुट और स्टेट्स को आगे पार्स करने की अनुमति देता है।
- उदाहरण के लिए, एक गुम अर्धविराम जोड़ना कथन मोड पुनर्प्राप्ति विधि में आता है। हालाँकि, पार्स डिज़ाइनर को इन परिवर्तनों को करते समय सावधान रहने की आवश्यकता है क्योंकि एक गलत सुधार अनंत लूप की ओर ले जा सकता है।
पैनिक-मोड रिकवरी
- जब पार्सर को कोई त्रुटि मिलती है, तो यह मोड शेष कथन को अनदेखा कर देता है और गलत इनपुट से सेमी-कोलन की तरह डिलीमीटर तक इनपुट को प्रोसेस नहीं करता है। यह एक सरल त्रुटि पुनर्प्राप्ति विधि है।
- इस प्रकार की रिकवरी विधि में, पार्सर इनपुट प्रतीकों को एक-एक करके तब तक अस्वीकार करता है जब तक कि सिंक्रोनाइज़िंग टोकन का एक निर्दिष्ट समूह नहीं मिल जाता। सिंक्रोनाइज़िंग टोकन आम तौर पर या जैसे सीमांकक का उपयोग करते हैं।
वाक्यांश-स्तरीय पुनर्प्राप्ति
- कंपाइलर टोकन डालकर या हटाकर प्रोग्राम को सही करता है। इससे यह वहीं से पार्स करना शुरू कर देता है जहां से यह था। यह शेष इनपुट पर सुधार करता है। यह शेष इनपुट के प्रीफ़िक्स को किसी स्ट्रिंग से बदल सकता है, इससे पार्सर को प्रक्रिया जारी रखने में मदद मिलती है।
त्रुटि प्रोडक्शंस
- त्रुटि उत्पादन पुनर्प्राप्ति उस भाषा के लिए व्याकरण का विस्तार करती है जो गलत निर्माण उत्पन्न करती है। पार्सर फिर उस निर्माण के बारे में त्रुटि निदान करता है।
वैश्विक सुधार
- गलत इनपुट स्ट्रिंग को प्रोसेस करते समय कंपाइलर को यथासंभव कम बदलाव करने चाहिए। गलत इनपुट स्ट्रिंग a और व्याकरण c दिए जाने पर, एल्गोरिदम संबंधित स्ट्रिंग b के लिए पार्स ट्री की खोज करेंगे। जैसे कुछ प्रविष्टियाँ, विलोपन, और टोकन में किए गए संशोधन जो a को b में बदलने के लिए आवश्यक हैं, जितना संभव हो उतना कम है।
व्याकरण
व्याकरण संरचनात्मक नियमों का एक समूह है जो किसी भाषा का वर्णन करता है। व्याकरण किसी भी वाक्य को संरचना प्रदान करता है। यह शब्द इन नियमों के अध्ययन को भी संदर्भित करता है, और इस फ़ाइल में आकृति विज्ञान, ध्वनि विज्ञान और वाक्यविन्यास शामिल हैं। यह वाक्यविन्यास के कई प्रकारों का वर्णन करने में सक्षम है। प्रोग्रामिंग की भाषाएँ.
व्याकरण के नियम
- गैर-टर्मिनल प्रतीक कम से कम एक उत्पादन के बाईं ओर दिखाई देना चाहिए
- किसी भी उत्पादन के ::= के दाईं ओर लक्ष्य प्रतीक कभी प्रदर्शित नहीं किया जाना चाहिए
- एक नियम पुनरावर्ती है यदि बायाँ पक्ष अपने दाएँ पक्ष में प्रकट होता है
नोटेशनल कन्वेंशन
संकेतात्मक अभिसमय प्रतीक को तत्व को वर्गाकार कोष्ठकों में रखकर दर्शाया जा सकता है। यह तत्व के उदाहरणों का एक मनमाना अनुक्रम है जिसे तत्व को कोष्ठकों में रखकर और उसके बाद तारांकन चिह्न लगाकर दर्शाया जा सकता है, { … }*.
यह विकल्प का चयन है जो एकल नियम के भीतर प्रतीक का उपयोग कर सकता है। आवश्यकता पड़ने पर इसे कोष्ठक ([,] ) द्वारा संलग्न किया जा सकता है।
दो प्रकार के नोटेशनल कन्वेंशन क्षेत्र टर्मिनल और नॉन-टर्मिनल
1.टर्मिनल:
- वर्णमाला के छोटे अक्षर जैसे a, b, c,
- Opera+,-, *, आदि जैसे प्रतीकों का उपयोग करें।
- विराम चिह्न जैसे कोष्ठक, हैश, अल्पविराम
- 0, 1, …, 9 अंक
- बोल्डफेस स्ट्रिंग जैसे id या if, कुछ भी जो एकल टर्मिनल प्रतीक का प्रतिनिधित्व करता है
2. नॉनटर्मिनल्स:
- बड़े अक्षर जैसे A, B, C
- लोअर-केस इटैलिक नाम: अभिव्यक्ति या कुछ
संदर्भ मुक्त व्याकरण
CFG एक बाएं-पुनरावर्ती व्याकरण है जिसमें इस प्रकार का कम से कम एक उत्पादन होता है। संदर्भ-मुक्त व्याकरण में नियम मुख्य रूप से पुनरावर्ती होते हैं। एक वाक्यविन्यास विश्लेषक जाँचता है कि विशिष्ट प्रोग्राम संदर्भ-मुक्त व्याकरण के सभी नियमों को पूरा करता है या नहीं। यदि यह पूरा करता है, तो ये नियम वाक्यविन्यास विश्लेषक उस प्रोग्राम के लिए एक पार्स ट्री बना सकते हैं।
expression -> expression -+ term expression -> expression – term expression-> term term -> term * factor term -> expression/ factor term -> factor factor factor -> ( expression ) factor -> id
व्याकरण व्युत्पत्ति
व्याकरण व्युत्पत्ति व्याकरण नियम का एक क्रम है जो आरंभिक प्रतीक को स्ट्रिंग में बदल देता है। व्युत्पत्ति यह साबित करती है कि स्ट्रिंग व्याकरण की भाषा से संबंधित है।
सबसे बाईं ओर की व्युत्पत्ति
जब इनपुट के वाक्यात्मक रूप को स्कैन करके बाएं से दाएं क्रम में प्रतिस्थापित किया जाता है, तो इसे सबसे बाएं व्युत्पन्न के रूप में जाना जाता है। सबसे बाएं व्युत्पन्न द्वारा व्युत्पन्न वाक्यात्मक रूप को बाएं-वाक्यात्मक रूप कहा जाता है।
सबसे दायाँ व्युत्पत्ति
सबसे दाहिनी व्युत्पत्ति स्कैन करती है और इनपुट को उत्पादन नियमों के साथ दाएं से बाएं, अनुक्रम में बदल देती है। इसे सबसे दाहिनी व्युत्पत्ति के रूप में जाना जाता है। सबसे दाहिनी व्युत्पत्ति से व्युत्पन्न वाक्यात्मक रूप को दायां-वाक्यात्मक रूप के रूप में जाना जाता है।
वाक्यविन्यास बनाम लेक्सिकल विश्लेषक
वाक्यविन्यास विश्लेषक | लेक्सिकल विश्लेषक |
---|---|
वाक्यविन्यास विश्लेषक मुख्य रूप से भाषा की पुनरावर्ती संरचनाओं से संबंधित होता है। | शाब्दिक विश्लेषक वाक्यविन्यास विश्लेषक का कार्य आसान बनाता है। |
वाक्यविन्यास विश्लेषक प्रोग्रामिंग भाषा में सार्थक संरचनाओं को पहचानने के लिए स्रोत प्रोग्राम में टोकनों पर काम करता है। | लेक्सिकल विश्लेषक स्रोत प्रोग्राम में टोकन को पहचानता है। |
यह लेक्सिकल विश्लेषकों से टोकन के रूप में इनपुट प्राप्त करता है। | यह द्वारा आपूर्ति किये गए टोकन की वैधता के लिए जिम्मेदार है
वाक्यविन्यास विश्लेषक |
सिंटैक्स विश्लेषक का उपयोग करने के नुकसान
- यह कभी निर्धारित नहीं करेगा कि टोकन वैध है या नहीं
- यह निर्धारित करने में आपकी सहायता नहीं करता कि किसी टोकन प्रकार पर किया गया ऑपरेशन वैध है या नहीं
- आप यह तय नहीं कर सकते कि टोकन का उपयोग करने से पहले उसे घोषित और आरंभीकृत किया जाए
सारांश
- वाक्यविन्यास विश्लेषण संकलक डिजाइन प्रक्रिया का दूसरा चरण है जो शाब्दिक विश्लेषण के बाद आता है
- वाक्यविन्यास विश्लेषक आपको कोड पर नियम लागू करने में मदद करता है
- वाक्य, लेक्सेम, टोकन, कीवर्ड और आरक्षित शब्द, शोर शब्द, टिप्पणियाँ, सीमांकक, वर्ण सेट, पहचानकर्ता कुछ महत्वपूर्ण शब्द हैं जिनका उपयोग कंपाइलर निर्माण में वाक्यविन्यास विश्लेषण में किया जाता है
- पार्स जाँचता है कि इनपुट स्ट्रिंग अच्छी तरह से बनाई गई है, और यदि नहीं, तो इसे अस्वीकार कर दें
- पार्सिंग तकनीकों को दो अलग-अलग समूहों में विभाजित किया गया है: टॉप-डाउन पार्सिंग, बॉटम-अप पार्सिंग
- पार्सिंग विधि के दौरान लेक्सिकल, सिंटैक्टिकल, सिमेंटिकल और लॉजिकल कुछ सामान्य त्रुटियाँ होती हैं
- व्याकरण संरचनात्मक नियमों का एक समूह है जो किसी भाषा का वर्णन करता है
- संकेतात्मक अभिसमय प्रतीक को वर्गाकार कोष्ठकों में तत्व को रखकर दर्शाया जा सकता है
- CFG एक वाम-पुनरावर्ती व्याकरण है जिसमें निम्न प्रकार का कम से कम एक उत्पादन होता है
- व्याकरण व्युत्पत्ति व्याकरण नियम का एक अनुक्रम है जो प्रारंभिक प्रतीक को स्ट्रिंग में बदल देता है
- वाक्यविन्यास विश्लेषक मुख्य रूप से भाषा की पुनरावर्ती संरचनाओं से निपटता है, जबकि शाब्दिक विश्लेषक वाक्यविन्यास विश्लेषक के कार्य को आसान बनाता है। डीबीएमएस
- सिंटैक्स विश्लेषक विधि का दोष यह है कि यह कभी भी यह निर्धारित नहीं कर पाएगा कि कोई टोकन वैध है या नहीं