2010-11-14 16 views

उत्तर

8

हां, चूंकि एलएल और एलआर दोनों डेटा बाएं से दाएं को पार्स करते हैं; और चूंकि एलएल (1) आगे देखता है केवल एक टोकन यह अनिवार्य रूप से एक एलआर (1) होना चाहिए। यह एलआर (के) के लिए भी सच है, जहां के> 1, चूंकि एलआर (के) व्याकरण को एलआर (1) व्याकरण में परिवर्तित किया जा सकता है।

एलआर और एलएल व्याकरण के बीच का अंतर आता है कि एलआर सही दाढ़ी पैदा करता है, जहां एलएल बाएं सबसे ज्यादा व्युत्पन्न पैदा करता है। तो इसका मतलब यह है कि एक एलआर पार्सर वास्तव में एलएल व्याकरण की तुलना में अधिक सेट को पार्स कर सकता है क्योंकि यह पत्तियों से बनता है।

A -> "(" A ")" | "(" ")" 

फिर डालूँगा (1) स्ट्रिंग (()) पार्स होगा:

कहना इस प्रकार हम प्रस्तुतियों है की सुविधा देता है

(()) -> A 
    -> "(" A ")" 
    -> "(" "(" ")" ")" 

कहाँ के रूप में एलआर (1) के रूप में पार्स जाएगा इस प्रकार है:

Input Stack   Action 
(()) 0  
()) 0 '(' 
))  0 '(' '(' 
)  0 '(' '(' ')' Reduce using A -> "(" ")" 
)  0 '(' A 
-  0 '(' A ')' Reduce using A -> "(" A ")" 
-  0 A   Accept 

अधिक जानकारी के लिए देखें: http://en.wikipedia.org/wiki/LL_parsing

+0

लेकिन एलएल (1) द्वारा पार्स द्वारा प्रयुक्त अनुक्रम (प्रोडक्शंस) हमेशा एलआर (1) द्वारा उपयोग किए गए विपरीत अनुक्रम (प्रोडक्शंस) में नहीं होता है। पार्स करने के लिए। भले ही पूर्व शीर्ष पर है और बाद में पार्सर नीचे है इसलिए सभी एलएल (1) के लिए एलआर (1) होने का आपका कारण पर्याप्त प्रतीत नहीं होता है। – siddharth

+1

कुछ एलआर होने का मतलब यह नहीं है कि पार्स पेड़ उलटा एलएल पार्स पेड़ के समान होता है, और इस प्रकार पार्सर विपरीत क्रम में प्रस्तुतियों का उपयोग नहीं करेगा। इसका मतलब यह है कि एक एलआर पार्सर एक ही व्याकरण के तारों के उसी सेट को सही तरीके से पार्स कर सकता है। – Mike

+0

क्या यह तथ्य विरोधाभास करता है? http://cs.stackexchange.com/questions/60763/does-my-grammar-contradict-ll-⊆-lr1/60764#60764 – Pranav