java - स्केल पार्सर संयोजक बनाम एएनटीएलआर/जावा उत्पन्न पार्सर?




parsing scala (3)

मैं पार्सर संयोजकों का उपयोग कर बाहरी डीएसएल का उत्पादन करने की कोशिश करने के इच्छुक हूं। इसे एक आंतरिक डीएसएल होने की आवश्यकता नहीं है। लेकिन मुझे नहीं पता कि यह बेहतर होगा।

इसे समझने का सबसे अच्छा तरीका व्याकरण का सरलीकृत संस्करण लेना होगा, इसे दोनों तरीकों से आजमाएं और मतभेदों का मूल्यांकन करें।

मैं ज्यादातर स्काला में लिखे गए ऐप के लिए एक अभिव्यक्ति पार्सर लिख रहा हूं। मैंने स्कैला में एएसटी ऑब्जेक्ट्स बनाए हैं, और अब पार्सर लिखने की जरूरत है। मैंने स्कैला के अंतर्निर्मित पार्सर संयोजकों और एएनटीएलआर 3 के बारे में भी सुना है, और मैं सोच रहा हूं: जो बेहतर प्रदर्शन और लेखन कोड को आसान प्रदान करेगा? अब तक:

एएनटीएलआर पेशेवर

  1. श्रुत
  2. उपवास
  3. बाहरी डीएसएल
  4. एंटएलआरवर्क्स (पार्सर व्याकरण डीबगिंग / परीक्षण के लिए महान आईडीई)

एएनटीएलआर विपक्ष

  1. जावा-आधारित (स्कैला इंटरऑप चुनौतीपूर्ण हो सकता है, कोई अनुभव?)
  2. रनटाइम पर एक बड़ी निर्भरता की आवश्यकता है

पार्सर संयोजक पेशेवरों

  1. स्कैला का हिस्सा
  2. एक कम निर्माण कदम
  3. रनटाइम निर्भरता की कोई ज़रूरत नहीं है; उदाहरण के लिए स्कैला की रनटाइम लाइब्रेरी में पहले से ही शामिल है

पार्सर संयोजक विपक्ष

  1. आंतरिक डीएसएल (धीमा निष्पादन का मतलब हो सकता है?)
  2. कोई एएनटीएलआरवर्क्स (अच्छा पार्सर परीक्षण और विज़ुअलाइजेशन फीचर्स प्रदान करता है)

कोई विचार?

संपादित करें: यह अभिव्यक्ति पार्सर बीजगणितीय / गणित अभिव्यक्तियों को पार करती है। इसे अंतिम रूप देने पर Android के लिए ऐप मैग्निफिकलक में उपयोग किया जाएगा।


मैं पार्सर संयोजकों की प्रदर्शन सीमाओं के बारे में चिंता नहीं करता जबतक कि आप बीजगणितीय अभिव्यक्तियों को पार्स करने की योजना बना रहे थे जो कि कुछ पेज लंबे हैं। प्रोग्रामिंग स्कैला पुस्तक का उल्लेख है कि पार्सर संयोजकों का एक अधिक कुशल कार्यान्वयन संभव है। शायद किसी को लिखने के लिए समय और ऊर्जा मिल जाएगी।

मुझे लगता है कि एएनटीएलआर के साथ आप दो अतिरिक्त बिल्ड चरणों के बारे में बात कर रहे हैं: एएनटीएलआर जावा को संकलित करता है, और आपको केवल स्कैला के बजाए बाइटकोड में स्कैला और जावा दोनों को संकलित करने की आवश्यकता है।


स्कैला के पार्सर संयोजक बहुत कुशल नहीं हैं। वे बनने के लिए डिजाइन नहीं किए गए थे। वे अपेक्षाकृत छोटे इनपुट के साथ छोटे कार्यों को करने के लिए अच्छे हैं।

तो यह वास्तव में आपकी आवश्यकताओं पर निर्भर करता है। एएनटीएलआर के साथ कोई इंटरऑप समस्या नहीं होनी चाहिए। जावा से कॉलिंग स्कैला बालों वाली हो सकती है, लेकिन स्कैला से जावा को कॉल करना लगभग हमेशा काम करता है।





parser-combinators