पर ध्यान नहीं देता मैं एक पार्सर कि स्काला के RegexParsers
का उपयोग कर लिखा गया था है - linkस्काला PackratParser विफलता पार्सर
यह था कुछ गंभीर प्रदर्शन समस्याओं जब एक व्याकरण जो गहराई से नेस्टेड भाव था पार्स करने। इस तरह मैंने एक संस्करण बनाया है जहां मैं स्कैला के PackratParsers
- link
पैक्रेट संस्करण समान प्रदर्शन समस्या प्रदर्शित नहीं करता है और सही ढंग से व्याकरण को पार करता है। हालांकि, जब मैं परीक्षण के लिए एक अवैध व्याकरण प्रदान करता हूं, उदा। this
सही ढंग से 'अमान्य नियम' विफलता रिपोर्ट करने के लिए प्रयोग किया जाता है पुराने (गैर packrat) पार्सर, यहाँ विफलता पार्सर Combinator | failure("Invalid rule")
के माध्यम से - link
packrat-पार्सर संस्करण का उपयोग कर रहे हैं, अगर मैं सक्षम ट्रेसिंग मैं इस ट्रेस से देख सकता हूं कि विफलता केवल गैर-पैट्रैट संस्करण में बनाई गई है, हालांकि पैकट्रैसर इसे अनदेखा कर रहा है और इसके बजाय हमेशा failure: Base Failure
लौटाता है।
क्या पैट्रैटपार्सर्स का उपयोग करते समय विफलता हैंडलिंग के बारे में कुछ अलग है जिसे मुझे समझने की आवश्यकता है?
यदि मैं विफलता ("अमान्य नियम") के बजाय 'त्रुटि (" अमान्य नियम ") का उपयोग करता हूं, तो बैकट्रैकिंग बंद हो गई है, मेरे कई अन्य नियम जो पहले मान्य थे, 'त्रुटि' ('अवैध नियम") 'जो सही नहीं है। – adamretter