2011-10-13 13 views
11

एक चरण में लेक्सर और पार्सिंग चरणों को मिलाकर कभी-कभी पारसी पार्सर्स को कम पठनीय बनाता है लेकिन उन्हें धीमा कर देता है। एक समाधान एलेक्स को टोकननाइज़र के रूप में उपयोग करना है और फिर पैरसेक टोकन स्ट्रीम के पार्सर के रूप में उपयोग करना है।क्या लेक्सर्स लिखने के लिए कोई हैकेल ईडीएसएल है?

यह ठीक है लेकिन अगर मैं एलेक्स से छुटकारा पा सकता हूं तो यह बेहतर होगा क्योंकि यह संकलन पाइपलाइन में एक प्रीप्रोकैसिंग चरण जोड़ता है, हैकेल "आईडीई" आदि के साथ अच्छी तरह से एकीकृत नहीं होता है। मैं सोच रहा था कि वहां क्या था टोकनकारियों का वर्णन करने के लिए एक हैकेल ईडीएसएल जैसी चीज, एलेक्स की शैली में बहुत अधिक, लेकिन एक पुस्तकालय के रूप में।

+0

यह एक सवाल है कि मैं के रूप में की देर ध्यान दे रहा है, लेकिन कुछ भी नहीं है मैं वास्तव में देखा है वहाँ किया गया है है। मैं शायद एक रेगेक्स ईडीएसएल की कल्पना कर रहा हूं जिसमें से हम एक अनजान टोकननाइज़र (:: [RegEx] -> स्ट्रिंग -> [स्ट्रिंग]) बनाते हैं। –

+0

मैं किसी भी regexp लाइब्रेरी का उपयोग कर किसी भी regexp लाइब्रेरी का उपयोग कर एक त्वरित समाधान के साथ आ सकता हूं, वर्तमान स्ट्रिंग को प्रत्येक regexp को फिर से मिलान करने का प्रयास करके, लेकिन मैं सभी regexps के सेट के अपने ज्ञान के कारण बहुत सारे एलेक्स 'अनुकूलन खो देंगे। –

उत्तर

4

हाँ - http://www.cse.unsw.edu.au/~chak/papers/Cha99.html

Hackage से पहले, मैनुअल एक पैकेज CTK (संकलक टूलकिट) कहा जाता है में कोड जारी करने के लिए इस्तेमाल किया। मुझे यकीन नहीं है कि परियोजना की स्थिति इन दिनों क्या है।

मुझे लगता है कि "हास्केल में लेक्सिंग हास्केल" पेपर से थॉमस हॉलग्रेन का लेक्सर कोड जनरेटर के बजाए गतिशील था, जबकि रिलीज को हास्केल को लेक्स करने के लिए तैयार किया गया है, पुस्तकालय में मशीनरी अधिक सामान्य है। Iech Diatchki हैक पर कोड डाल दिया है।

http://hackage.haskell.org/package/haskell-lexer

+0

बिल्कुल सही, धन्यवाद! –

3

आप पारसीक को लेक्सर के रूप में भी उपयोग कर सकते हैं। सबसे पहले आप स्ट्रिंग को टोकन में पार्स करते हैं, फिर आप लक्ष्य डेटा प्रकार में टोकन को पार्स करते हैं।

+0

सच है लेकिन फिर आप कम से कम डीएफए की गति खो देते हैं जो आप किसी भी अभिव्यक्ति को खोए बिना एलेक्स जैसे टूल के साथ प्राप्त कर सकते हैं (मैं पारसीक को पसंद करता हूं, कहता हूं, यैक क्योंकि यह बेहतर मॉड्यूलरिटी/व्यक्तित्व प्रदान करता है, लेकिन मुझे विश्वास नहीं है कि यह है लेक्सर्स के लिए बहुत उपयोगी)। लेकिन कम से कम, यह दो चरणों को मिश्रण करने की समस्या हल करता है। धन्यवाद। –