2012-08-29 17 views
12

मैं लेक्स/वाईएसी का उपयोग कर रहा हूं और अब मैं एएनटीएलआर पर स्विच करने की कोशिश कर रहा हूं। प्रमुख चिंता यह है कि एएनटीएलआर एक एलएल (*) पार्सर है जो Yacc के विपरीत है जो एलएएलआर है। मुझे नीचे-नीचे सोचने के लिए उपयोग किया जाता है और मुझे बिल्कुल नहीं पता कि एलएल व्याकरण का क्या फायदा है। लोग कहते हैं कि एलएल व्याकरण इन दिनों समझने में आसान और अधिक लोकप्रिय हैं। लेकिन ऐसा लगता है कि एलआर पार्सर्स अधिक शक्तिशाली हैं उदा। एलएल पार्सर्स बाएं-रिकर्सन से निपटने में असमर्थ हैं, हालांकि कुछ कामकाज होने लगते हैं।एलएएलआर बनाम एलएल पार्सर

तो सवाल यह है कि एलएएलआर पर एलएल व्याकरण का क्या फायदा है? अगर कोई मुझे कुछ उदाहरण दे सकता है तो मैं इसकी सराहना करता हूं। उपयोगी लेखों के लिए लिंक भी बहुत अच्छा होगा।

अग्रिम में आपकी सहायता के लिए धन्यवाद!

(मैं देख रहा हूँ कि यह एक महान संसाधन है:। What advantages do LL parsers have over LR parsers? है, लेकिन यह कुछ उदाहरण के साथ बेहतर किया गया है होगा)

उत्तर

9

सबसे बड़ा लाभ मैं पारसर्स जाएगा करने के लिए देखते हैं कि वे तो समझते हैं और लागू करने के लिए आसान कर रहे हैं! आप कोड के साथ recursive descent पार्सर्स लिख सकते हैं जो व्याकरण से निकटता से मेल खाते हैं।

एलआर आम तौर पर और अधिक शक्तिशाली है और यह भी बहुत तेजी से माना जाता है, लेकिन कुछ व्यापार नापसंद है कि मैं जानता हूँ कि इस प्रकार हैं:

  • एलआर पारसर्स केवल संश्लेषित विशेषताओं का उपयोग कर सकते हैं; वे विरासत विशेषताओं को पारित नहीं कर सकते हैं।
  • एलआर व्याकरण में क्रियाएं व्याकरण नोडेटर्मिनिज्म का कारण बन सकती हैं लेकिन एलएल में नहीं।

हालांकि, आप पाएंगे कि एलएल (*) भी बहुत शक्तिशाली हैं।

+1

यदि कोई व्यक्ति आपको पार्सर जनरेटर को परिभाषित करता है, तो परिभाषा के अनुसार यह "कार्यान्वित करने में आसान" है। उस स्थिति में, आप पार्सर जेनरेटर चुनते हैं जो आपके प्रयासों को कम करने के लिए आसानी से भाषाओं की सबसे बड़ी कक्षा को संभालता है। परिप्रेक्ष्य से, आईएमएचओ, एलआर एलएल पर काफी आसानी से जीतता है। जीएलआर एलआर पर काफी आसानी से जीतता है। –

+0

मैं सहमत हूं, लेकिन फिर भी एलएल लागू करने में आसान है। मैं यह इंगित कर रहा था कि एलआर को आमतौर पर एक उपकरण का उपयोग करने की आवश्यकता होती है। मुझे यह बहुत ही दिलचस्प लगता है कि आप रिकर्सिव वंश लिख सकते हैं और कोड और व्याकरण हाथ में जा सकते हैं। –

+3

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

9

एलआर पार्सल एलएल पार्सर्स की तुलना में सख्ती से अधिक शक्तिशाली हैं, और इसके अतिरिक्त, एलएएलआर पार्सर्स एल (एन) जैसे एलएल पार्सर्स में चल सकते हैं। तो आपको एलएल पर एलएल के किसी भी कार्यात्मक फायदे नहीं मिलेगा।

इस प्रकार, एलएल का एकमात्र लाभ यह है कि एलआर राज्य मशीनें काफी जटिल और समझने में मुश्किल होती हैं, और एलआर पार्सर्स स्वयं विशेष रूप से सहज नहीं होते हैं। दूसरी तरफ, एलएल पार्सर कोड जो स्वचालित रूप से जेनरेट होता है उसे समझना और डीबग करना बहुत आसान हो सकता है।

+0

राय के लिए धन्यवाद, डेडएमजी। –

संबंधित मुद्दे