DuckDB v2.0 एक नया PEG-आधारित SQL पार्सर पेश करता है, जो 2018 में प्रोजेक्ट के पहले कमिट के बाद से उपयोग किए गए PostgreSQL-व्युत्पन्न पार्सर की जगह लेता है। पिछला Bison-जनित LALR(1) पार्सर Duck SQL के विकसित होने के साथ shift/reduce और reduce/reduce संघर्षों के कारण विस्तारित करना तेजी से कठिन होता गया। नया पार्सर, जो Parsing Expression Grammars का उपयोग करके बनाया गया है, विकल्पों को स्पष्ट रूप से क्रमबद्ध करके इन संघर्षों को समाप्त करता है और रनटाइम एक्सटेंसिबिलिटी सक्षम करता है।
पार्सर SQL क्वेरी को तीन चरणों में संसाधित करता है: टोकनाइज़र, पार्सर और ट्रांसफॉर्मर। टोकनाइज़र इनपुट को कीवर्ड और पहचानकर्ताओं जैसे टोकन में विभाजित करता है। पार्सर Duck SQL व्याकरण के अनुसार सिंटैक्स को मान्य करता है, जिससे एक पार्स ट्री बनता है। ट्रांसफॉर्मर इसे बाइंडर के लिए DuckDB के आंतरिक AST में परिवर्तित करता है।
विकास एक शोध प्रोटोटाइप से शुरू हुआ जो केवल SQL के एक उपसमूह को संभालता था। इसे क्रमिक रूप से विस्तारित किया गया और DuckDB v1.5 में एक प्रयोगात्मक सुविधा के रूप में पेश किया गया। पूर्ण व्याकरण अब सभी स्टेटमेंट और एक्सप्रेशन प्रकारों, सही ऑपरेटर प्राथमिकता, उचित कीवर्ड वर्गीकरण और मौजूदा AST संरचनाओं के साथ संगतता का समर्थन करता है।
जबकि कार्यान्वयन में महत्वपूर्ण बदलाव होते हैं, Duck SQL स्वयं अपरिवर्तित रहता है। नया पार्सर त्रुटि रिपोर्टिंग में भी सुधार करता है, सिंटैक्स विफलताओं के लिए बेहतर संदर्भ प्रदान करता है। यह परिवर्तन अन्य सिस्टमों के समान कदमों के अनुरूप है, जैसे Python 3.9, जिसने भी अधिक लचीलेपन के लिए PEG-आधारित पार्सिंग अपनाया।
स्रोत: Hacker News · HeadlinesBriefing द्वारा सारांशित