का उपयोग कर कस्टम व्हाइटस्पेस मैं अपने पार्सर बनाने के लिए Parsec's makeTokenParser
का उपयोग करना चाहता हूं, लेकिन मैं whiteSpace
की अपनी परिभाषा का उपयोग करना चाहता हूं। मेरी परिभाषा के साथ whiteSpace
को निम्नलिखित स्थानांतरित करना, लेकिन सभी lexeme
पार्सर्स अभी भी पुरानी परिभाषा का उपयोग करते हैं (उदा। P.identifier lexer
पुराने व्हाइटस्पेस का उपयोग करेगा)।हास्केल पारसेक
...
lexer :: P.TokenParser()
lexer = l { P.whiteSpace = myWhiteSpace }
where l = P.makeTokenParser myLanguageDef
...
makeTokenParser
के लिए कोड को देखते हुए मुझे लगता है कि मुझे समझ में क्यों यह इस तरह से काम करता है। मैं जानना चाहता हूं कि makeTokenParser
के लिए कोड को पूरी तरह डुप्लिकेट करने से बचने के लिए कोई कामकाज है या नहीं?
संबंधित: http://stackoverflow.com/questions/5672142/in-parsec-is-there-a-way-to-prevent-lexeme-from-consuming-newlines –