यह समस्या एक सम्मेलन में कोष्ठक के मिलान की समस्या का एक सटीक एनालॉग है जिसमें कुछ करीबी कोष्ठक छोड़ दिए गए हैं। यहाँ एक "अगर" (या प्रतिनिधि व्याकरण में) एक खुला कोष्ठक और एक "और" (है ) एक करीबी कोष्ठक है। (के अनुक्रम से है और है आप डालने यंत्रवत् कर सकते हैं रों प्रत्येक से पहले एक रखकर अंत में और एक।) क्योंकि यह मेरे कोष्ठकों के मस्तिष्क के साथ बेहतर फिट बैठता है, मैं लिखने के रूप में यद्यपि कि हाथ में समस्या थी।ababcb
पारंपरिक "मैच निकटतम" झूलने-अन्य रिज़ॉल्यूशन सबसे हाल ही में अभी तक बेजोड़ खुले के साथ प्रत्येक पास से मेल खाता है। इसका मतलब है कि एक मिलान खुला और उसके मिलान बंद के बीच एक बेजोड़ खुला (या उस मामले के लिए) कभी नहीं है।
एक संभावित विकल्प यह होगा कि आप जल्द से जल्द संभव बेजोड़ ओपन के साथ प्रत्येक मैच को पास करें। "संभव" यहाँ का मतलब है कि खुले कोष्ठकों के घोंसले का उल्लंघन किए बिना मिलान किया जा सकता है (जैसे। पहले में feasibly पिछले मेल नहीं खा सकता )।(()())
यह मिलान बाहर से किया जाना है, ताकि किसी करीबी के लिए एक मैच का प्रयास न किया जाए, जब तक कि सभी संलग्न जोड़े का मिलान न हो जाए। यह तथ्य एक बाउंड-लुकहेड एल्गोरिथ्म के साथ एक पार्स का उत्पादन करना असंभव बनाता है, क्योंकि स्ट्रिंग को पूरी तरह से मिलान किए गए सेगमेंट में विभाजित करने के बाद पार्स को अंदर से काम करना पड़ता है (क्योंकि वे प्रभावी रूप से संभावित मैचों की सीमा को सीमित करते हैं)।
हालाँकि, यह तथ्य कि एक ऑनलाइन लेफ्ट-टू-राइट पार्सर मौजूद नहीं है, इसका अर्थ यह नहीं है कि कोई सीबीजी नहीं है। (जाहिर है: दोनों पक्षों के बीच से एक पालिंदी भाषा को बीच की ओर छोड़ दिया जाना चाहिए, लेकिन यह एक सहज व्याकरण लिखना आसान है)।
"फर्स्ट-मैच" कोष्ठक समस्या के लिए एक व्याकरण का उत्पादन करने के लिए, मैंने इस तथ्य पर भरोसा किया कि एक बेजोड़ खुला एक मिलान खुला द्वारा पीछा नहीं किया जा सकता है। यदि ऐसा होता, तो फ़र्स्टेस्ट-मैच प्रॉपर्टी लागू नहीं होती क्योंकि बेजोड़ ओपन मैचेड ओपन के नज़दीक से मेल खा सकता था, इसलिए यह तथ्य यह है कि यह बेजोड़ है, फ़र्स्टेस्ट-मैच प्रॉपर्टी का उल्लंघन करता है।
तो यहाँ थोड़ा क्लंकी व्याकरण है:
SUMT→U|M→T|aUbT|aUbc|aMbU→aMbM|c→aT|ac
S स्टार्ट सिंबल है; पूरी तरह से मिलान वाले बयान हैं; निश्चित रूप से बेजोड़ कथन हैं (जिसका अर्थ है कि उनमें कम से कम एक बेजोड़ शामिल , इसलिए वे खाली नहीं हो सकते हैं) और एक "पूंछ" है जिसमें केवल बेजोड़ । बेजोड़ खुले के बारे में उपरोक्त तथ्य को व्याकरण से सीधे पढ़ा जा सकता है: सभी बेजोड़ खुलने का अर्थ से लिया गया है , एक केवल एक के अंत में दिखाई दे सकता है , और एक केवल एक द्वारा पीछा किया जा सकता है ।MUaTaTTUUT
क्लचनेस खाली स्ट्रिंग के मिलान से को रोकने से आता है । जो कि मैं अस्पष्ट अस्पष्टता पर विचार करता है, के एक समूह को रोकता है: वे इस अर्थ में सहज हैं कि खुलने और बंद होने का मिलान सभी वैकल्पिक पर्सों में समान है। यदि को अनुमति नहीं है, तो यह अशक्त होगा, यह पूरी तरह से संतुलित स्ट्रिंग प्राप्त करेगा। चूंकि , वास्तव में, , जो एक अस्पष्टता की ओर जाता है जिसमें आप पूरी तरह से संतुलित को की एक श्रृंखला मान सकते हैं, जिसके बाद एक खाली , या एक कम पूरी तरह से संतुलित ।UUSM∗USMUMU
संभवतः मेरे द्वारा चुने गए से बेहतर वर्कअराउंड है। लेकिन यह काम करने लगता है, और यह बाइसन के GLR पार्सर के साथ अच्छा खेलता है जिसे मैं इसका परीक्षण करता था; जब तक आप अस्पष्टता को संभालने के लिए अतिरिक्त कोड नहीं लिखते हैं, तब तक पार्सर अस्पष्ट पार्स के बारे में शिकायत करता है, और मैं ऐसा करने के लिए बहुत आलसी था। मैंने इसे 20 ओपन + क्लोज के तार के साथ परीक्षण किया, और ऐसा लगता है कि गलत तरीके से नेस्टेड दृश्यों के लिए पार्स का उत्पादन किए बिना, हर सही-नेस्टेड अनुक्रम के लिए एक अस्पष्ट पार्स का उत्पादन किया है।