क्या "मैच निकटतम" के अलावा "लटकती हुई" समस्या का एक अलग समाधान है?


9

निम्नलिखित विषय से मुक्त व्याकरण प्रस्तुत एक "और झूलते" प्रकार अस्पष्टता (कल्पना करो कि के लिए खड़ा है और के लिए खड़ा है और अनुदेश या ब्लॉक के कुछ अन्य प्रकार के लिए खड़ा है): उदाहरण के लिए, को या रूप में पार्स किया जा सकता है (यह इस व्याकरण का सबसे सरल / सबसे छोटा अस्पष्ट शब्द है)।aif expr thenbelsec

SaSbS|aS|c
aacbc(a(acbc))(a(ac)bc)

इस "झूलने वाले" और "अस्पष्टता" को हल करने का "मानक" तरीका "और" ( ) कथन को निकटतम / अंतरतम "अगर-तब" ( ) के साथ जोड़ी बनाने के लिए मजबूर करता है । इसे निम्न प्रकार से पूरा किया जा सकता है: यह व्याकरण असंदिग्ध है। उपरोक्त उदाहरण में, यह पार्सिंग को मजबूर करता है ।ba

SaTbS|aS|cTaTbT|c
(a(acbc))

प्रश्न: क्या अस्पष्टता को हल करने का एक और प्राकृतिक तरीका है जो पार्स करने के लिए ? दूसरे शब्दों में, मैं एक व्याकरण की तलाश कर रहा हूं, जो उपरोक्त दोनों के समान भाषा उत्पन्न करता है, जो कि अस्पष्ट है, और यह कि को रूप में पार्स करता है ।(a(ac)bc)aacbcaacbc(a(ac)bc)

टिप्पणी: मेरा पहला प्रयास इस प्रकार था: जो आवश्यकतानुसार की अस्पष्टता को हल करता है - लेकिन यह व्याकरण अभी भी अस्पष्ट है: को या as रूप में पार्स किया जा सकता है। ।

SaSbS|aU|cUaU|c
aacbcaacbacbc(a(ac)b(acbc))(a(acb(ac))bc)

1
और आपके अंतिम उदाहरण में, आप दोनों में से कौन से संभावित पर्स को "प्राकृतिक" या सही मानते हैं और क्यों?
रिसी

@rici हाँ, यह एक मुश्किल सवाल है!, और मुझे नहीं पता। मैं एक व्याकरण के साथ खुश रहूँगा जो या तो पार्सिंग पैदा करता है । क्या मैं ज्यादातर के बारे में परवाह है कि है (अधिक के साथ 'की तुलना में एस के) से मेल खाता है वें पिछले के साथ वें (और पत्तियों अंतरतम की बेजोड़)। aacbacbcaaaaaacbcbcbcabkbkaa
ग्रो-टेंस

जवाबों:


7

यह समस्या एक सम्‍मेलन में कोष्ठक के मिलान की समस्‍या का एक सटीक एनालॉग है जिसमें कुछ करीबी कोष्ठक छोड़ दिए गए हैं। यहाँ एक "अगर" (या प्रतिनिधि व्याकरण में) एक खुला कोष्ठक और एक "और" (है ) एक करीबी कोष्ठक है। (के अनुक्रम से है और है आप डालने यंत्रवत् कर सकते हैं रों प्रत्येक से पहले एक रखकर अंत में और एक।) क्योंकि यह मेरे कोष्ठकों के मस्तिष्क के साथ बेहतर फिट बैठता है, मैं लिखने के रूप में यद्यपि कि हाथ में समस्या थी।ababcb

पारंपरिक "मैच निकटतम" झूलने-अन्य रिज़ॉल्यूशन सबसे हाल ही में अभी तक बेजोड़ खुले के साथ प्रत्येक पास से मेल खाता है। इसका मतलब है कि एक मिलान खुला और उसके मिलान बंद के बीच एक बेजोड़ खुला (या उस मामले के लिए) कभी नहीं है।

एक संभावित विकल्प यह होगा कि आप जल्द से जल्द संभव बेजोड़ ओपन के साथ प्रत्येक मैच को पास करें। "संभव" यहाँ का मतलब है कि खुले कोष्ठकों के घोंसले का उल्लंघन किए बिना मिलान किया जा सकता है (जैसे। पहले में feasibly पिछले मेल नहीं खा सकता )।(()())

यह मिलान बाहर से किया जाना है, ताकि किसी करीबी के लिए एक मैच का प्रयास न किया जाए, जब तक कि सभी संलग्न जोड़े का मिलान न हो जाए। यह तथ्य एक बाउंड-लुकहेड एल्गोरिथ्म के साथ एक पार्स का उत्पादन करना असंभव बनाता है, क्योंकि स्ट्रिंग को पूरी तरह से मिलान किए गए सेगमेंट में विभाजित करने के बाद पार्स को अंदर से काम करना पड़ता है (क्योंकि वे प्रभावी रूप से संभावित मैचों की सीमा को सीमित करते हैं)।

हालाँकि, यह तथ्य कि एक ऑनलाइन लेफ्ट-टू-राइट पार्सर मौजूद नहीं है, इसका अर्थ यह नहीं है कि कोई सीबीजी नहीं है। (जाहिर है: दोनों पक्षों के बीच से एक पालिंदी भाषा को बीच की ओर छोड़ दिया जाना चाहिए, लेकिन यह एक सहज व्याकरण लिखना आसान है)।

"फर्स्ट-मैच" कोष्ठक समस्या के लिए एक व्याकरण का उत्पादन करने के लिए, मैंने इस तथ्य पर भरोसा किया कि एक बेजोड़ खुला एक मिलान खुला द्वारा पीछा नहीं किया जा सकता है। यदि ऐसा होता, तो फ़र्स्टेस्ट-मैच प्रॉपर्टी लागू नहीं होती क्योंकि बेजोड़ ओपन मैचेड ओपन के नज़दीक से मेल खा सकता था, इसलिए यह तथ्य यह है कि यह बेजोड़ है, फ़र्स्टेस्ट-मैच प्रॉपर्टी का उल्लंघन करता है।

तो यहाँ थोड़ा क्लंकी व्याकरण है:

SU|MUT|aUbT|aUbc|aMbUMaMbM|cTaT|ac

S स्टार्ट सिंबल है; पूरी तरह से मिलान वाले बयान हैं; निश्चित रूप से बेजोड़ कथन हैं (जिसका अर्थ है कि उनमें कम से कम एक बेजोड़ शामिल , इसलिए वे खाली नहीं हो सकते हैं) और एक "पूंछ" है जिसमें केवल बेजोड़ । बेजोड़ खुले के बारे में उपरोक्त तथ्य को व्याकरण से सीधे पढ़ा जा सकता है: सभी बेजोड़ खुलने का अर्थ से लिया गया है , एक केवल एक के अंत में दिखाई दे सकता है , और एक केवल एक द्वारा पीछा किया जा सकता है ।MUaTaTTUUT

क्लचनेस खाली स्ट्रिंग के मिलान से को रोकने से आता है । जो कि मैं अस्पष्ट अस्पष्टता पर विचार करता है, के एक समूह को रोकता है: वे इस अर्थ में सहज हैं कि खुलने और बंद होने का मिलान सभी वैकल्पिक पर्सों में समान है। यदि को अनुमति नहीं है, तो यह अशक्त होगा, यह पूरी तरह से संतुलित स्ट्रिंग प्राप्त करेगा। चूंकि , वास्तव में, , जो एक अस्पष्टता की ओर जाता है जिसमें आप पूरी तरह से संतुलित को की एक श्रृंखला मान सकते हैं, जिसके बाद एक खाली , या एक कम पूरी तरह से संतुलित ।UUSMUSMUMU

संभवतः मेरे द्वारा चुने गए से बेहतर वर्कअराउंड है। लेकिन यह काम करने लगता है, और यह बाइसन के GLR पार्सर के साथ अच्छा खेलता है जिसे मैं इसका परीक्षण करता था; जब तक आप अस्पष्टता को संभालने के लिए अतिरिक्त कोड नहीं लिखते हैं, तब तक पार्सर अस्पष्ट पार्स के बारे में शिकायत करता है, और मैं ऐसा करने के लिए बहुत आलसी था। मैंने इसे 20 ओपन + क्लोज के तार के साथ परीक्षण किया, और ऐसा लगता है कि गलत तरीके से नेस्टेड दृश्यों के लिए पार्स का उत्पादन किए बिना, हर सही-नेस्टेड अनुक्रम के लिए एक अस्पष्ट पार्स का उत्पादन किया है।


मैंने जो निष्कर्ष निकाला था, उसे हासिल करने के लिए बधाई देना शायद असंभव था! मैंने प्रायोगिक रूप से जाँच की कि लंबाई experiment16 के शब्दों के लिए यह व्याकरण वास्तव में असंदिग्ध है और मेरे प्रश्न के समान शब्द उत्पन्न करता है। अब मुझे विस्तार से समझना है कि यह कैसे काम करता है!
ग्रो-टेंस

@ Gro-Tsen: मुझे उम्मीद है कि दूसरा पैराग्राफ इसे समझाने में मदद करेगा। व्याकरण एक बहुत सरल सरल अस्पष्टताओं के साथ छोड़ दिया गया है: ( मेरे समाधान के रूप में , ) और यही वह है जब मैं इस समस्या के बारे में सोच रहा था। मुझे अपने आप को समझाने में थोड़ा समय लगा कि अस्पष्ट पार्स से बचने के लिए को गैर-अशक्त बनाना आवश्यक था (हालांकि, जैसा कि मैंने कहा, अस्पष्टता सापेक्ष है), और थोड़ी देर के लिए रास्ते में काम करना मैंने उसे लागू करने के लिए चुना। मैं शर्त लगा सकता हूँ कि एक और अधिक सुंदर प्रस्तुति है। SaSbT|aMbSMTaT|cU
रिसी

0

+ B + c + d + e और abcde लें। दो स्पष्ट तरीके हैं कि एक व्याकरण इनको कैसे पार्स कर सकता है, लेकिन एक तरीका है जो हम उपयोग करते हैं।

"झूलने" के मामले में, यह वास्तव में नहीं है कि लोग इसे कैसे देखते हैं। इसके बजाय सिंटैक्स की व्याख्या "यदि" के रूप में की जाती है, जिसके बाद शून्य, एक या एक से अधिक "यदि", उसके बाद एक वैकल्पिक "और" होगा।


ध्यान दें कि "अगर ... फिर ... अगर ... फिर ... और ... अगर ... फिर ..." मेरे संकेतन में मेल खाता है: यह मेरे प्रारंभिक व्याकरण (और वेरिएंट सहमत हैं) द्वारा स्पष्ट रूप से पार्स किया जाता है, इसलिए मैं नहीं पूछ रहा हूं इसके वैकल्पिक विकल्प के लिए। acbacbacbc
ग्रो-टेंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.