क्या नियमित अभिव्यक्ति


16

यदि मेरे पास एक टाइप 3 ग्रामर है, तो इसे एक पुशडाउन ऑटोमेटन (स्टैक पर कोई भी ऑपरेशन किए बिना) पर प्रस्तुत किया जा सकता है, इसलिए मैं संदर्भ मुक्त भाषाओं का उपयोग करके नियमित अभिव्यक्ति का प्रतिनिधित्व कर सकता हूं। लेकिन क्या मैं जान सकता हूं कि कोई पार्स टेबल बनाए बिना टाइप 3 व्याकरण , L L ( 1 ) , S L R ( 1 ) आदि है?एलआर(1)एलएल(1)एसएलआर(1)

जवाबों:


16

सभी नियमित भाषाओं में LL (1) व्याकरण है। ऐसा व्याकरण प्राप्त करने के लिए, नियमित भाषा के लिए कोई भी DFA लें (शायद नियमित अभिव्यक्ति से प्राप्त NFA पर सबसेट निर्माण करके), फिर उसे एक सही-पुनरावर्ती नियमित व्याकरण में परिवर्तित करें। यह व्याकरण तब एलएल (1) है, क्योंकि एक ही अपरंपरागत के लिए किसी भी जोड़ी की प्रस्तुतियों या तो अलग-अलग प्रतीकों के साथ शुरू होती हैं, या एक or का उत्पादन करता है और लुकहेड टोकन के रूप में $ होता है। नतीजतन, सभी नियमित भाषाएं एलआर (1) भी हैं, क्योंकि कोई भी एलएल (1) व्याकरण एलआर (1) है। इसके अतिरिक्त, इस पेपर से एक महत्वपूर्ण परिणाम का उपयोग करके , आप यह दिखा सकते हैं कि किसी भी LR (1) भाषा में SLR (1) व्याकरण है, जिसका अर्थ है कि किसी भी नियमित भाषा में SLR (1) व्याकरण है।

हालांकि, नियमित भाषाएं हैं नहीं सभी एलआर (0)। एलआर (0) भाषाओं में बहुत विशिष्ट गुण हैं - विशेष रूप से, उन्हें उपसर्ग-मुक्त होना चाहिए। इस प्रकार नियमित भाषा {ए, आ} एलआर (0) नहीं है, हालांकि यह स्पष्ट रूप से नियमित है (regex a (aa))। हालाँकि, LR (0) भाषाएँ नियमित भाषाओं में ठीक से समाहित नहीं हैं; इस व्याकरण के लिए {0 n 21 n | n the 1} LR (0) है, लेकिन भाषा नियमित नहीं है:

S -> E
E -> 0E1 | 2

उम्मीद है की यह मदद करेगा!


2
यह तथ्य कि सही-नियमित व्याकरण नियमित भाषा के समुच्चय को स्वीकार करते हैं, आमतौर पर कक्षा (या अभ्यास) में किया जाता है, इसलिए उत्तर यह है कि बहुत अधिक तत्काल।
राफेल

2

(सादा पुराना) नियमित अभिव्यक्ति वाक्य रचना (आपने कहा "प्रतिनिधित्व") LR (0) है। आप एक regex का प्रतिनिधित्व करने वाले स्ट्रिंग को पार्स करने के लिए किसी लुकहेड की आवश्यकता नहीं है। आप regexes के लिए व्याकरण पर पार्सर जनरेटर चलाकर इसे आसानी से तय कर सकते हैं: -} आप regexps के लिए एक सरल पुनरावर्ती वंश (LL (0)) पार्सर को भी आसानी से कोड कर सकते हैं; एलएल (0) जो कुछ भी है वह एलआर (0) है।

मैं नहीं जानता कि क्या अधिक जटिल तथाकथित "रेगेक्सप्स" का वाक्यविन्यास पर्ल के समान है; लेकिन पर्ल के regexps regexps की तुलना में कड़ाई से अधिक शक्तिशाली हैं, इसलिए वे सादे पुराने rexxps नहीं हैं।

यह निर्धारित करने के लिए कि क्या किसी व्याकरण के पास कुछ संपत्ति है, आपको किसी प्रकार का विधेय चलाना होगा। यह निर्धारित करने के लिए कि क्या यह (एस) एलआर (के) है, आपको एक विधेय चलाना होगा जो उस संपत्ति की जांच कर सके। वास्तव में, इस तरह के किसी भी विधेय को प्रभावी ढंग से पार्स तालिकाओं का निर्माण करना चाहिए, क्योंकि वे जिस तरह से परिभाषित किए गए हैं।


पर्ल नियमित अभिव्यक्ति एनएफए पर काम करता है

यह सवाल नहीं था कि पर्ल रीजैक्स कैसे काम करता था। यह इस बारे में था कि क्या (पर्ल?) Regexps कुछ तकनीकों द्वारा पार्स करने योग्य थे। मैं विश्वास कर सकता हूं कि पर्ल रेगेक्स अपने मिलान करने के लिए एनएफए का उपयोग करते हैं, साथ ही कुछ अन्य संदर्भ-संवेदनशील डेटा कैप्चर करते हैं, लेकिन मुझे सवाल की प्रासंगिकता दिखाई नहीं देती है।

3
-1 नियमित अभिव्यक्ति कर रहे हैं नहीं एलआर (0)। एलआर (0) भाषाओं को उपसर्ग-मुक्त होना चाहिए, लेकिन नियमित अभिव्यक्ति a|(aa)एक ऐसी भाषा का वर्णन करती है जो उपसर्ग-मुक्त नहीं है। इसके अतिरिक्त, LR (0) भाषाएं epsilon प्रस्तुतियों के साथ व्याकरण को संभाल नहीं सकती हैं, इसलिए नियमित भाषा {epsilon, a} LR (0) नहीं है। हालांकि, सुव्यवस्थित भाषाओँ हैं डालूँगा (1), क्योंकि उन पर नियमित व्याकरण के रूप में लिख सकते हैं, और इस तरह वे सब एलआर (1) कर रहे हैं। चूँकि किसी भी LR (1) भाषा में SLR (1) व्याकरण होता है, इसका मतलब यह है कि सभी नियमित भाषा SLR (1) हैं।
टेम्प्लेटेटीपीड

1
LL (0) के बारे में, यह दूसरा तरीका है: LL (0) भाषाएँ नियमित भाषाओं का एक उचित उपसमुच्चय हैं। ध्यान दें कि एलएल (0) का मतलब है कि आप विभिन्न व्युत्पन्नियों के बीच निर्णय लेने के लिए लुकहेड का उपयोग नहीं करते हैं - जिसका मूल रूप से मतलब है कि कोई निर्णय नहीं हैं और भाषा में एक शब्द शामिल है। LR (0), इसके विपरीत, एक उपयोगी वर्ग है - फिर से आप निर्णय लेने के लिए (यहां कटौती के लिए) लुकहेड का उपयोग नहीं करते हैं, लेकिन इस तथ्य के कारण अभी भी कुछ विविधता है कि स्थानांतरण अलग-अलग प्रस्तुतियों के बीच अंतर कर सकता है।

1
@ इराबैस्टर- नियमित अभिव्यक्तियों का वाक्य विन्यास LR (0) नहीं है क्योंकि नियमित अभिव्यक्तियाँ उपसर्ग मुक्त नहीं हैं। वे एलएल (0) भी नहीं हैं, क्योंकि एलएल (0) भाषाओं में केवल एक स्ट्रिंग (या कोई स्ट्रिंग) नहीं हो सकती है।
templatetypedef
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.