2012-11-29 9 views
18

मैंने हाल ही में this उत्कृष्ट लेख से प्रैट पार्सर्स के बारे में सीखा और प्रैट पार्सर्स को सरल और पुनरावर्ती मूल पार्सर्स की तुलना में अधिक सुरुचिपूर्ण पाया। मैंने अन्य पार्सर प्रकारों की तुलना करने के बारे में थोड़ी अधिक जानकारी प्राप्त करने का प्रयास किया, लेकिन पाया कि विकिपीडिया लेख मुश्किल से एक स्टब है और बड़ी परियोजनाओं की मात्रा जो इसका उपयोग करती है, मैं दो बराबर पा सकता हूं।प्रैट पार्सर्स अन्य पार्सर प्रकारों की तुलना कैसे करते हैं और वे इतने छोटे क्यों उपयोग किए जाते हैं?

प्रैट पार्सर्स इतने कम क्यों उपयोग किए जाते हैं? क्या उनके पास कोई गंभीर सीमाएं या नुकसान हैं जिनके बारे में मुझे नहीं पता? वे अन्य पार्सर प्रकारों की तुलना में वास्तव में कैसे तुलना करते हैं? मुझे कब और कब उपयोग करना चाहिए?

उत्तर

16

प्रैट पार्सर और तथाकथित "शंटिंग यार्ड" पार्सर (जिसमें बहुत अधिक विकिपीडिया आलेख संलग्न है) के बीच बहुत कम अंतर है; मुख्य अंतर यह है कि प्रैट रिकर्सन का उपयोग करता है और इसलिए ढेर का उपयोग करता है, जबकि Djikstra ("shunting yard") एक स्पष्ट ढेर रखता है। इसके अलावा, वे बिल्कुल संचालन के समान अनुक्रम करते हैं। मुझे लगता है कि एल्गोरिदम की Djikstra की अभिव्यक्ति रिकर्सोफोबिया की वजह से अधिक आम है।

प्रोग्राम स्टैक का उपयोग करने के कुछ फायदे हैं; उनमें से एक यह है कि टाइप सुरक्षा को बनाए रखना आसान है, क्योंकि पूरे ढेर को एक प्रकार का होना जरूरी नहीं है। दूसरी ओर, कई अभिव्यक्ति पार्सर्स में केवल एक प्रकार होता है।

ड्रैगन बुक में एक अल्गर्थम शामिल है जो व्याकरण से ऑपरेटर प्राथमिकता तालिका उत्पन्न करेगा। जैसा कि यह इंगित करता है, तथ्य यह है कि एल्गोरिदम सफल होता है यह आवश्यक नहीं है कि ऑपरेटर प्राथमिकता पार्सर बिल्कुल उसी भाषा का विश्लेषण करेगी। वहां और अधिक रोचक जानकारी है जिसे मैं निश्चित रूप से भूल गया हूं; यदि आप एल्गोरिदम में रूचि रखते हैं, तो यह उन स्थानों में से एक है जहां आप देख सकते हैं। इसमें दिलचस्प अंतर्दृष्टि शामिल है कि < और > सटीक संबंध ऑपरेटर को व्युत्पन्न को देखकर उत्पन्न किया जा सकता है, यदि आप < और > के साथ उत्पादन के परिणाम को स्पष्ट तरीके से देखते हैं।

पूरी तरह से, मेरा अनुभव यह है कि ज्यादातर समय जब आप एक ब्लॉग पोस्ट पाते हैं, "मेरा भगवान, मैंने बस एक्स पर ठोकर खाई है और यह बहुत अच्छा है और इसके बारे में और लोग क्यों नहीं जानते ??? ? ", जवाब है" कृपया यह न मानें कि आपकी अज्ञान सार्वभौमिक है। " लेकिन शायद मैं आज एक सनकी मनोदशा में हूँ।

वैसे, Lua पार्सर एक हाथ से निर्मित रिकर्सिव वंश पार्सर है जो अभिव्यक्तियों को पार्स करने के लिए प्रैट स्टाइल पार्सिंग का उपयोग करता है; यह एक बहुत ही आम तकनीक है, मुझे लगता है, और आप इसे अन्य स्थानों पर पाएंगे, हालांकि आपको पैटर्न देखने के लिए कोड के माध्यम से जीतना पड़ सकता है।

+0

हम्म, टर्नरी एक्सप्रेशन या स्टेटमेंट जैसे स्टेटस (हालत) {...} और {...} शंटिंग यार्ड एल्गोरिदम के साथ कैसे दिखता है? – Llamageddon

+3

@asmageddon, टर्नरी ऑपरेटर कोष्ठक की तरह बहुत कुछ दिखता है। '?' ऑपरेटर की बायीं ओर रखता है और ':' सही प्राथमिकता रखता है। जब स्टैक के शीर्ष पर '' 'है, तो यह' '' की तरह कार्य करता है, सिवाय इसके कि यह '' '' की अपेक्षा कर रहा है, जब ':' आता है, तो यह '?' को बदल देता है। जब '' 'है पॉप किया गया, इसमें इसके साथ तीन ऑपरेंड लगते हैं। (इसके लिए एक सामान्य एल्गोरिदम है।) कथन में टर्मिनलों वैसे ही काम करते हैं। – rici

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