GLR महान यदि आप एक पार्स पेड़/वन चाहते हैं और ब्लैक बॉक्स से परहेज नहीं करते है। यह आपको CFG में टाइप करने देता है, जो आप एलआर/एलएएलआर विवादों को स्थिर रूप से हल करने के बजाय, संपूर्ण परीक्षण के माध्यम से पार्स समय पर अस्पष्टताओं की जांच करने की लागत पर चाहते हैं। कुछ कहते हैं कि यह एक अच्छा व्यापार बंद है। ईरा बैक्सटर के डीएमएस उपकरण या एल्खाउंड, जिसमें एक मुफ्त सी ++ व्याकरण है, इस समस्या के वर्ग के लिए उपयोगी हैं। ANTLR भाषा अनुप्रयोगों की एक बड़ी कक्षा के लिए भी उपयोगी है, लेकिन एलएल (*) नामक पुनरावर्ती मूल पार्सर्स उत्पन्न करने वाले शीर्ष-नीचे दृष्टिकोण का उपयोग करता है जो अर्थपूर्ण भविष्यवाणियों की अनुमति देता है। मैं यहां सबूत के बिना बताऊंगा कि भविष्यवाणी आपको सीएफजी से परे संदर्भ-संवेदनशील भाषाओं का विश्लेषण करने की अनुमति देती है। प्रोग्रामर व्याकरण में क्रियाएं डालना पसंद करते हैं, जैसे कि अच्छी त्रुटि हैंडलिंग, और एकल-चरण डीबग की तरह।एलएल तीनों में अच्छा है। एलएल वह है जो हम हाथ से करते हैं ताकि समझना आसान हो। wikipedia nonsense about LR being better at handling errors पर विश्वास न करें। उस ने कहा, यदि आप एएनटीएलआर के साथ बहुत पीछे हटते हैं, तो एलएल (*) (पीईजी में यह समस्या है) के साथ त्रुटियां वास्तव में बदतर हैं।
पुन बैक ट्रैकिंग। जीएलआर अनुमान लगाता है (यानी बैकट्रैक), पीईजी, एएनटीएलआर, और किसी भी अन्य गैर-निर्धारिती रणनीति की तरह। किसी भी गैर-निर्धारिती एलआर राज्य में, जीएलआर "फोर्क्स" उप-पार्सर्स किसी व्यवहार्य पथ को आजमाने के लिए। वैसे भी, एलएल में त्रुटि प्रबंधन के लिए अच्छा संदर्भ है। जहां एलआर जानता है कि यह एक अभिव्यक्ति से मेल खाता है, एलएल जानता है कि यह असाइनमेंट में एक अभिव्यक्ति है या IF
-शर्त है; एलआर जानता है कि यह या तो हो सकता है लेकिन यह सुनिश्चित नहीं है - और अनिश्चितता वह है जहां इसे अपनी शक्ति मिलती है।
GLR O(n^3)
सबसे खराब स्थिति है। पैक्रेट/पीईजी O(n)
सबसे खराब मामला है। ANTLR के O(n^2)
हैं चक्रीय अग्रदर्शी DFA की वजह से, लेकिन व्यवहार में O(n)
। वास्तव में कोई फर्क नहीं पड़ता। जीएलआर पर्याप्त तेज़ है।
ANTLRहै एक अन्य टीएल आंग आर ecognition नहीं विरोधी एलआर के लिए ool, लेकिन मुझे पसंद है कि एक भी;)
सच कहूं, युवा कोडर का एक बहुत की तरह 80 के दशक में, मुझे एलएएलआर नहीं समझा और काले बक्से पसंद नहीं आया (अब मैं जीएलआर इंजन की सुंदरता खोदता हूं लेकिन फिर भी एलएल पसंद करता हूं)। मैंने एक वाणिज्यिक एलएल (के) आधारित कंपाइलर बनाया और हाथ से निर्मित किए गए जेनरेट करने के लिए एक टूल बनाने का फैसला किया। एएनटीएलआर हर किसी के लिए नहीं है और सी ++ जैसे बढ़ते मामलों को जीएलआर के साथ बेहतर तरीके से संभाला जा सकता है लेकिन बहुत से लोगों को एएनटीएलआर उनके आराम क्षेत्र में फिट बैठता है। जनवरी 2008 से, एएनटीएलआर के बाइनरी जार के 134,000 डाउनलोड, एएनटीएलआरवर्क्स के भीतर, और स्रोत ज़िप कुल (Google Analytics के अनुसार) रहे हैं। एलएल (*) पर बहुत सारे अनुभवजन्य डेटा के साथ our paper देखें।
स्रोत
2010-11-04 21:00:59
के बारे में * पारसर्स * (और नहीं व्याकरण) बात कर रहे: डालूँगा (*) एक सरल पुनरावर्ती में लिखा जा सकता है - दृष्टिकोण दृष्टिकोण। यह मेरी किताब में एक +1 है। –
@pst: सच है, मैं बस उम्मीद कर रहा था कि "क्योंकि उन्हें लागू करना आसान है" प्राथमिक लाभ नहीं था। :) –
ध्यान दें कि "एलआर" ANTLR में सिर्फ "भाषा मान्यता", व्याकरण के वर्ग यह स्वीकार करता है के बारे में कुछ भी नहीं के लिए खड़ा है। –