क्या एलएल (के) और एलआर (के) व्याकरण के बीच अंतर करने का कोई तरीका है?


12

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

हम यह भी जानते हैं कि हर एलएल व्याकरण एलआर है कि एलएल व्याकरण एलआर व्याकरण का एक उचित उपसमुच्चय है। पहले एक का उपयोग टॉप-डाउन पार्सिंग में किया जाता है और दूसरे का उपयोग नीचे-ऊपर पार्सिंग में किया जाता है।

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


3
और एल आर ( के ) टेबल उत्पन्न करने के लिए विहित तकनीकों का उपयोग करने के बारे में कैसे और जाँच करें कि क्या उनमें टकराव हैं? एल एल ( 1 ) और एल आर ( 1 ) आमतौर पर पार्सिंग पर किसी भी मानक पाठ्यपुस्तक में व्यवहार किया जाता है; एल एल ( कश्मीर ) और एल आर ( कश्मीर ) तकनीक थोड़ा मुश्किल लगता है कर रहे हैं, लेकिन यह भी अच्छी तरह से जाना जाता है। LL(k)LR(k)LL(1)LR(1)LL(k)LR(k)
एलेक्स दस ब्रिंक

@AlextenBrink यह लगता है जैसे आप एक जवाब दे सकते हैं! (आपका स्वागत है वापस, तुम्हें याद कर रहे थे!)
राफेल

एक व्याकरण एलएल या एलआर सही है या नहीं यह जांचने के लिए विहित तकनीक का उपयोग करना एक लंबा रास्ता तय करता है। मैं इसे खोजने के एक छोटे से तरीके के लिए कोशिश कर रहा हूं जो मुझे अहो-लाम-सेठी-उलेमन द्वारा कंपाइलर्स की पुस्तक में मिला।
देब

जवाबों:


11

LL(k)LR(k)LL(k)LR(k), और क्योंकि हम उनके लिए टेबल उत्पन्न कर सकते हैं (इनपुट तालिकाओं को पार्स करने के लिए पार्स टेबल का उपयोग किया जाता है)। ध्यान दें कि इन दो वर्गों के लिए, पार्स तालिका होने से आपको तुरंत जाँचने की अनुमति मिलती है कि क्या व्याकरण कक्षाओं में हैं, क्योंकि ऐसा है यदि और केवल यदि तालिकाओं में कोई त्रुटि नहीं है। इसके अलावा, हाँ, व्याकरण की कक्षाएं हैं जिन्हें हम कुशलतापूर्वक पार्स कर सकते हैं यदि हमारे पास एक टेबल है, लेकिन जिसके लिए हम मौजूद हैं, तो हम तालिका को उत्पन्न नहीं कर सकते हैं।

LL(1)LR(1)SLR(1)LL(k)LR(k)

LL(k)LR(k)LL(1)kLL(k)LR(k)या नहीं कि बहुपद समय में चला (तालिका पीढ़ी घातीय है)। विवरण के लिए, ऊपर दी गई पाठ्यपुस्तक पढ़ें। ध्यान दें कि बहुत सारे मामलों में, तालिका यथोचित आकार है, इसलिए परीक्षण की आवश्यकता नहीं है।

kkLL(k)LR(k)LR(k)kLL(c)ck( विवरण के लिए यहां देखें)।


क्या आपको पता है कि मैं परीक्षण के लिए बहुपद-समय एल्गोरिथ्म का विवरण कहां पा सकता हूं यदि कोई भाषा LR (k) है (पाठ्यपुस्तक खरीदने से अलग)?
user541686

2

हमें केवल यह जांचना है कि एक व्याकरण एलएल है या नहीं क्योंकि हर एलएल व्याकरण एलआर है। एलएल एलआर का उचित सबसेट है। इसलिए यदि कोई व्याकरण एलएल है तो वह एलआर होना चाहिए लेकिन प्रत्येक एलआर एलएल नहीं है।

जब भी A-> C | D पर एक व्याकरण G, LL iff में होता है, तो निम्न स्थिति होनी चाहिए:

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