मुझे लगता है कि प्रश्न में एक धारणा है कि केवल सीमा रेखा ही सही है।
वास्तविक जीवन में यह केवल अस्पष्ट व्याकरण के साथ जीने के लिए बहुत आम है, जब तक कि वे (बोलने के लिए) बहुत अस्पष्ट नहीं हैं।
उदाहरण के लिए, यदि आप याक के साथ संकलित व्याकरणों (या इसी तरह, जैसे बाइसन या बायकाक) को देखते हैं, तो आप पाएंगे कि जब आप उन्हें संकलित करते हैं तो "एन शिफ्ट / रिडक्ट टकराव" के बारे में काफी कुछ चेतावनी देते हैं। जब याक एक बदलाव / संघर्ष को कम करता है, तो यह व्याकरण में एक अस्पष्टता का संकेत देता है।
एक बदलाव / संघर्ष को कम करना, हालांकि, आमतौर पर एक काफी छोटी समस्या है। पार्सर जनरेटर कम करने के बजाय "शिफ्ट" के पक्ष में संघर्ष को हल करेगा। यदि आप चाहते हैं कि व्याकरण पूरी तरह से ठीक है (और यह अभ्यास में पूरी तरह से अच्छी तरह से काम करने लगता है)।
इस सामान्य आदेश पर एक मामले में एक बदलाव / कम संघर्ष उत्पन्न होता है (गैर-टर्मिनलों के लिए कैप का उपयोग करना और टर्मिनलों के लिए कम-मामला):
A -> B | c
B -> a | c
जब हम एक मुठभेड़ करते हैं c
, तो एक अस्पष्टता है: क्या हमें c
सीधे A
ए के रूप में पार्स करना चाहिए, या क्या हमें इसे ए के रूप में पार्स करना चाहिए B
, जो बदले में ए है A
? इस तरह के एक मामले में, याक और इस तरह के सरल / छोटे मार्ग का चयन किया जाएगा, और -> -> मार्ग जाने के बजाय c
सीधे ए के रूप में पार्स करें । यह गलत हो सकता है, लेकिन यदि ऐसा है, तो इसका मतलब है कि शायद आपके व्याकरण में वास्तव में सरल त्रुटि है, और आपको विकल्प की अनुमति बिल्कुल भी नहीं देनी चाहिए ।A
c
B
A
c
A
अब, इसके विपरीत, हम इस तरह से कुछ और कर सकते हैं:
A -> B | C
B -> a | c
C -> b | c
अब जब हम मुठभेड़ एक c
हम के इलाज के लिए है कि क्या के बीच संघर्ष है c
एक के रूप में B
या एक C
। इस बात की बहुत कम संभावना है कि एक स्वचालित संघर्ष समाधान रणनीति वह चुनने जा रही है जो हम वास्तव में चाहते हैं। इनमें से कोई भी "शिफ्ट" नहीं है - दोनों "रिडक्शन" हैं, इसलिए यह एक "कम / कम करने वाला संघर्ष" है (जो कि याक के आदी थे और ऐसे आम तौर पर शिफ्ट / संघर्ष को कम करने की तुलना में बहुत बड़ी समस्या के रूप में पहचाने जाते हैं)।
इसलिए, हालांकि मुझे यकीन नहीं है कि मैं यह कहने के लिए बहुत आगे जाऊंगा कि कोई भी वास्तव में उनके व्याकरण में अस्पष्टता का स्वागत करता है, कम से कम कुछ मामलों में यह मामूली रूप से पर्याप्त है कि कोई भी वास्तव में इसके बारे में पूरी परवाह नहीं करता है। अमूर्त में वे सभी अस्पष्टता को दूर करने के विचार को पसंद कर सकते हैं - लेकिन वास्तव में हमेशा ऐसा करने के लिए पर्याप्त नहीं है। उदाहरण के लिए, एक छोटा, सरल व्याकरण जिसमें एक मामूली अस्पष्टता होती है, एक बड़े, अधिक जटिल व्याकरण के लिए बेहतर हो सकता है, जो अस्पष्टता को समाप्त करता है (विशेषकर जब आप वास्तव में व्याकरण से एक पार्सर उत्पन्न करने के व्यावहारिक दायरे में आते हैं, और यह पाते हुए कि अस्पष्ट है व्याकरण एक ऐसे पार्सर का निर्माण करता है जो आपके लक्ष्य मशीन पर नहीं चलेगा)।