क्या ईपीएएल को मान्यता देने वाला कोई नोजनेरल सीएफजी पार्सिंग एल्गोरिदम है?


23

EPAL, यहां तक ​​कि palindromes की भाषा, को निम्न अस्पष्ट संदर्भ-मुक्त व्याकरण द्वारा उत्पन्न भाषा के रूप में परिभाषित किया गया है:

Saa

Sbb

SaSa

SbSb

ईपीएएल कई पार्सिंग एल्गोरिदम का 'बैन' है: मुझे अभी तक अस्पष्ट सीएफजी के लिए किसी भी पार्सिंग एल्गोरिदम का सामना करना पड़ा है जो भाषा का वर्णन करने वाले किसी भी व्याकरण को पार्स कर सकता है। यह अक्सर यह दिखाने के लिए उपयोग किया जाता है कि ऐसे अयोग्य सीएफजी हैं जिन्हें किसी विशेष पार्सर द्वारा पार्स नहीं किया जा सकता है। इसने मेरे प्रश्न को प्रेरित किया:

क्या कुछ पार्सिंग एल्गोरिथ्म केवल अस्पष्ट सीएफजी को स्वीकार कर रहा है जो ईपीएएल पर काम करता है?

बेशक, कोई व्याकरण के लिए एक ऐड-हॉक दो-पास पार्सर डिजाइन कर सकता है जो भाषा को रैखिक समय में पार्स करता है। मैं उन तरीकों को पार्स करने में दिलचस्पी रखता हूं जिन्हें विशेष रूप से EPAL को ध्यान में रखकर नहीं बनाया गया है।


1
मुझे यह पूछने में लगभग डर लगता है: पुनरावर्ती वंश द्वारा एलएल (1) के साथ क्या गलत है?
राफेल

3
गैर-बैकट्रैकिंग पुनरावर्ती वंश ईपीएल को संभाल नहीं सकता है क्योंकि भाषा किसी भी कश्मीर के लिए एलएल (के) नहीं है। बैकट्रैकिंग के साथ पुनरावर्ती वंश व्याकरण को O(n2) समय में संभाल सकता है , लेकिन यह एक सामान्य एल्गोरिथ्म है जिसमें घातीय सबसे खराब व्यवहार होता है, जो कि मैं नहीं देख रहा हूं।
एलेक्स टेन ब्रिंक

घातीय नहीं है, यह द्विघात है। O ( 2 N ) घातीय है। O(N2)O(2N)
विक्टर स्टैफुसा

1
@ विक्टर: कुछ व्याकरणों पर बैकट्रैकिंग का विस्तारात्मक व्यवहार है, सिर्फ इस विशेष व्याकरण पर नहीं। फिर भी, यह एक एल्गोरिथ्म है जो अस्पष्ट व्याकरण पर काम करता है, यह मेरे प्रश्न के उत्तर के रूप में छूट देता है।
एलेक्स दस ब्रिंक

1
@ जैमद: मेरा इरादा भाषा को पार्स करने का नहीं है (आप ऐसा कर सकते हैं जो तुच्छ रूप से रैखिक समय में कर सकते हैं), बल्कि अपनी जिज्ञासा को संतुष्ट करने के लिए: मैंने देखा है कि इसे एक ऐसी भाषा के उदाहरण के रूप में इस्तेमाल किया जा रहा है जिसे पार्स विधि द्वारा पार्स नहीं किया जा सकता है इतनी बार कि मैं उत्सुक हूँ अगर वहाँ कुछ विधि है कि इसे पहचानता है।
एलेक्स दस ब्रिंक

जवाबों:


14

अपने जोखिम पर एक पार्सिंग रणनीति के निम्नलिखित स्केच पर विचार करें।

केवल एक छोर से इनपुट पढ़ने के बजाय, हम दोनों पक्षों से पढ़ते हैं और मिलान नियमों की तलाश करते हैं। हम इसे पुनरावर्ती वंश शैली में कर सकते हैं; को कॉल करने के लिए, इनपुट के लिए उपसर्ग w और प्रत्यय v खोजें, जैसे कि कोई नियम A w B v है , शेष शब्द पर B ( ) में उतरता है । यदि कोई मेल नियम नहीं है, तो शब्द को अस्वीकार करें।A()wvAwBvB()

AwBvAwBvwpwvsvΘ(n2)

यह विचार गैर-रैखिक व्याकरण के लिए बिल्कुल भी काम नहीं करता है। रैखिक लेकिन अस्पष्ट व्याकरण सामान्य रूप से बैकट्रैकिंग (कम से कम नकारात्मक इनपुट के लिए) के बिना पार्स नहीं किया जा सकता है।


  1. wpv अर्थ यहाँ है कि और , अर्थात न तो शब्द दूसरे का उपसर्ग है। प्रत्यय के लिए समान है।wvvws

1
अति उत्कृष्ट! ठीक वही जो मेरे द्वारा खोजा जा रहा था। यह बहुत अच्छा है कि ऐसी भाषा जो किसी भी लिए एनएलआर नहीं है, इस तरह के एक सरल एल्गोरिथ्म द्वारा पार्स करने योग्य है। NLR(k)k
एलेक्स दस ब्रिंक

1
यह कुछ और विचार देने के बाद, मैंने आपके विवरण में एक छोटी सी त्रुटि की खोज की: रैखिक व्याकरण असंदिग्ध है, लेकिन इसका वर्णन करने के लिए ऐसा कोई अद्वितीय उपसर्ग नहीं है। अभी भी एक अनूठा उपसर्ग है, लेकिन आपको इसे प्राप्त करने के लिए गैर-विषयक के अंदर देखना पड़ सकता है, और आपका चलने का समय हो जाता है । यद्यपि आपका एल्गोरिथ्म पर काम करता है । SaAb|aBb,Aa,BbO(n2)EPAL
एलेक्स दस ब्रिंक

@AlextenBrink अच्छा कैच। मैंने इसका हिसाब करने के लिए संपादन किया।
राफेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.