2015-09-27 12 views
5

वहाँ एक रास्ता यह पार्स करने बंद हो जाता है के बाद Parsec से ते शेष इनपुट पाने के लिए अगर मैं सोच रहा था, या तो अगर यह एक सफल या असफल पार्स, हो सकता है इस हस्ताक्षर किया गया था:Parsec के बाएं इनपुट जाओ

parseRemaining :: Stream s Identity t => Parsec s() a -> SourceName -> s -> (s, Either ParseError a) 

हम कहां से मिल Either ParseError a के बजाय, हम अतिरिक्त शेष Stream s

+1

अटोपर्सेक का उपयोग करने पर विचार करें, यह बहुत तेज है और आंशिक मिलान का समर्थन करता है। – arrowd

+0

मैं बड़ी फाइलों या उस तरह कुछ भी पार्स नहीं कर रहा हूं, और जैसा कि मैं समझता हूं, Parsec एक आसान * इंटरफ़ेस * प्रदान करता है। मैं [इस उत्तर] के कारण Parsec का उपयोग करता हूं (http://stackoverflow.com/a/19213247/1276441) – chamini2

उत्तर

0

Megaparsec पर एक नजर डालें - Parsec का एक आधुनिक कांटा, संस्करण से शुरुआत 4.2.0 यह पार्स की शुरुआत में कस्टम राज्य की आपूर्ति करने की अनुमति देता है और अंत में पार्सर स्थिति निकालें (यह कोई फर्क नहीं पड़ता कि पार्सर सफल होता है या विफल रहता है)। यह आंशिक रूप से इनपुट पार्स करने के लिए, पार्स को फिर से शुरू, गैर मानक प्रारंभिक शाब्दिक स्थिति निर्दिष्ट करते हैं, आदि देखें अनुमति देता है runParser' और runParserT'


प्रकटीकरण: मैं मेगापरसेक के लेखकों में से एक हूं।

+0

मैं वह व्यक्ति था जिसने इस सुविधा के लिए कहा था, मैं इसका उपयोग कर रहा हूं। – chamini2

1

आप getInput का उपयोग कर सकते हैं, जो एक पार्सर है जो शेष इनपुट देता है।

+0

यह केवल सफल होने वाले पार्स पर इनपुट प्राप्त करने के लिए काम करेगा। मैं किसी भी मामले में इनपुट प्राप्त करने का एक तरीका चाहूंगा। – chamini2

0

मैंने पार्ससी के आंतरिक में थोड़ा सा खोला और मुझे राज्य की जानकारी (जिसमें धारा शामिल है) को पुनर्प्राप्त करने का एक आसान तरीका नहीं मिला।

आपके द्वारा प्राप्त त्रुटि की जांच करने के लिए एक विज्ञापन समाधान होगा और फिर पार्सिंग को रोकने के लिए अपनी स्थान जानकारी का उपयोग करें। (बेशक, यह कार्य तभी अपनी स्ट्रीम की मांग का समर्थन करता है काम करेगा।)