An Empirical Comparison of General Context-Free Parsers
यह शोध पत्र रस्ट (Rust) में कार्यान्वित छह सामान्य संदर्भ-मुक्त पार्सिंग एल्गोरिदम के पहले एकीकृत बेंचमार्क को प्रस्तुत करता है, जो यह प्रदर्शित करता है कि GLR परिवार पूर्ण भाषा अभिव्यक्ति का समर्थन करते हुए नियतकालिक LR(1) पार्सरों की तुलना में केवल 3x मध्यम प्रदर्शन ओवरहेड का भार वहन करके सॉफ्टवेयर इंजीनियरिंग उपकरणों के लिए एक व्यावहारिक डिफ़ॉल्ट विकल्प प्रदान करता है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आप एक अनुवादक हैं जो किसी विदेशी भाषा (सोर्स कोड) को ऐसी चीज़ में बदलना चाहते हैं जिसे कंप्यूटर समझ सके। इस प्रक्रिया को पार्सिंग (parsing) कहा जाता है।
दशकों से, सॉफ्टवेयर इंजीनियरों द्वारा उपयोग किए जाने वाले अनुवादक कठोर, नियमों से बंधे रोबोटों की तरह थे। वे अविश्वसनीय रूप से तेज़ थे, लेकिन वे बहुत ही नखरेबाज़ भी थे। यदि आपके द्वारा दी गई भाषा में थोड़ा सा भी अस्पष्टता या जटिल वाक्य संरचना होती, तो रोबोट काम करने से मना कर देता था। रोबोट को खुश करने के लिए, इंजीनियरों को भाषा को "हैक" करने में घंटों बिताने पड़ते थे—वाक्यों को फिर से लिखना, प्राकृतिक संरचनाओं को हटाना, और व्याकरण को इस तरह मरोड़ना ताकि वह रोबोट के संकीर्ण नियमों में फिट हो सके। यह एक गोल लकड़ी के टुकड़े को चौकोर सांचे में डालने जैसा था क्योंकि आपके पास केवल चौकोर सांचा ही उपलब्ध था।
इस कारण से, कई इंजीनियरों ने पूरी तरह से इन औपचारिक रोबोटों का उपयोग करना छोड़ दिया और अपने स्वयं के अनुवादक हाथ से बनाना शुरू कर दिया। ये हाथ से बने अनुवादक अक्सर त्रुटिपूर्ण (buggy), रखरखाव में कठिन और असुरक्षित होते हैं।
बड़ा सवाल
वर्षों तक, यह विश्वास था कि "सामान्य" (General) पार्सर—वे अनुवादक जो बिना किसी हैकिंग के किसी भी भाषा संरचना को संभाल सकते हैं—उपयोगी होने के लिए बहुत धीमे थे। उन्हें सख्त रोबोटों की तुलना में एक धीमे, अनाड़ी दैत्य की तरह माना जाता था।
इस पेपर के लेखकों ने इस बहस को सुलझाने का फैसला किया। उन्होंने इन "सामान्य" पार्सरों के छह अलग-अलग प्रकारों को पुराने "सख्त" रोबोटों के खिलाफ परखने के लिए एक "रेस ट्रैक" बनाया। उन्होंने सुनिश्चित किया कि प्रत्येक धावक एक ही जूते, एक ही ट्रैक और एक ही स्टॉपवॉच का उपयोग करे (उन्होंने सारा कोड एक ही भाषा, Rust में लिखा, और एक ही टूल्स का उपयोग किया)।
धावक
उन्होंने छह अलग-अलग रणनीतियों का परीक्षण किया:
- मैट्रिक्स मूवर्स (CYK और Valiant): ये एक विशाल ग्रिड को भरने के माध्यम से पहेली को हल करने की कोशिश करते हैं।
- टॉप-डाउन एक्सप्लोरर्स (Earley और GLL): ये ऊपर से नीचे की ओर संरचना का अनुमान लगाने की कोशिश करते हैं, और एक साथ कई रास्तों की खोज करते हैं।
- बॉटम-अप बिल्डर्स (RNGLR और BRNGLR): ये ज़मीन से ऊपर की ओर संरचना का निर्माण करते हैं, और संघर्षों को संभालने के लिए एक साथ कई रास्तों पर अपना ध्यान केंद्रित करते हैं।
- सख्त रोबोट (LL(1) और LR(1)): पुराने ज़माने के, तेज़-लेकिन नखरेबाज़ पार्सर।
परिणाम: चौंकाने वाला विजेता
- "अनाड़े दैत्य" (CYK और Valiant): ये बहुत खराब थे। वे इतने धीमे थे कि वास्तविक दुनिया के कार्यों के लिए लगभग बेकार थे। वे एक शहर के बीच से टैंक चलाने की कोशिश करने जैसे हैं; वे यहाँ ठीक से काम नहीं करते।
- "टॉप-डाउन एक्सप्लोरर्स" (Earley और GLL):
- Earley सबसे धीमा था।
- GLL कुछ भाषाओं पर तेज़ था लेकिन अन्य भाषाओं पर बहुत धीमा और मेमोरी-खपत वाला हो गया। यह एक ऐसे धावक की तरह था जो सीधे ट्रैक पर तो महान है लेकिन घुमावदार रास्ते पर अपने ही पैरों में उलझकर गिर जाता है।
- "बॉटम-अप बिल्डर्स" (RNGLR और BRNGLR): ये चैंपियन थे।
- ये सभी "सामान्य" पारर्स में सबसे तेज़ थे।
- ये मेमोरी के मामले में भी अविश्वसनीय रूप से कुशल थे, और लगभग सख्त रोबोटों जितना ही कम मेमोरी का उपयोग करते थे।
- बड़ा खुलासा: जब भाषा इतनी सरल थी कि सख्त रोबोटों के लिए उपयुक्त थी, तो ये नए "सामान्य" पार्सर केवल 3 गुना धीमे थे। लेखक तर्क देते हैं कि बिना हैकिंग के किसी भी भाषा को संभालने की क्षमता के लिए 3 गुना धीमा होना एक बहुत छोटी कीमत है।
"ग्रामर हैकिंग" का जाल
पेपर ने यह भी देखा कि क्या होता है जब आप सख्त रोबोटों में फिट होने के लिए किसी भाषा को "हैक" करने की कोशिश करते हैं।
- गति: हाँ, सख्त रोबोट को फिट करने के लिए भाषा को हैक करने से यह 4 से 7 गुना तेज़ हो जाता है।
- नुकसान: लेकिन, भाषा को हैक करना अक्सर नए "सामान्य" पार्सरों के लिए सबसे खराब स्थिति पैदा कर देता है। यह अपने पसंदीदा खिलाड़ी को जिताने के लिए खेल के नियम बदलने जैसा है, लेकिन अनजाने में यह खेल को बाकी सभी के लिए खेलने के अयोग्य बना देता है।
- फैसला: लेखक कहते हैं कि आपको थोड़ी सी अतिरिक्त गति निकालने के लिए अपनी भाषा को हैक नहीं करना चाहिए। "सामान्य" पार्सर लगभग हर चीज़ के लिए पर्याप्त तेज़ हैं, और भाषा को हैक करने से उसे पढ़ना और बनाए रखना कठिन हो जाता है।
सरल निष्कर्ष
लंबे समय तक, सॉफ्टवेयर इंजीनियरों को लगता था कि उन्हें गति (सख्त, हैक किए गए पार्सर का उपयोग करना) और लचीलेपन (धीमे, सामान्य पार्सर का उपयोग करना) के बीच किसी एक को चुनना होगा।
यह पेपर साबित करता है कि यह चुनाव एक मिथक है। नए "सामान्य" पार्सर (विशेष रूप से GLR परिवार) डिफ़ॉल्ट विकल्प बनने के लिए पर्याप्त तेज़ हैं। वे एक यूनिवर्सल अडैप्टर की तरह हैं: वे लगभग किसी भी प्लग में फिट हो जाते हैं, और हालांकि वे एक विशिष्ट अडैप्टर की तुलना में थोड़े भारी हो सकते हैं, वे आपको हर एक डिवाइस के लिए अलग अडैप्टर खरीदने से बचाते हैं।
संक्षेप में: पुराने, नखरेबाज़ पार्सरों में फिट होने के लिए अपनी भाषाओं को हैक करना बंद करें। नए, लचीले "सामान्य" पार्सर का उपयोग करें। वे तेज़ हैं, वे कम मेमोरी का उपयोग करते हैं, और वे आपको अपनी भाषाओं को स्वाभाविक रूप से लिखे जाने देने की अनुमति देते हैं।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।