2011-04-01 12 views
5

मैं हैकेल में प्रोटोकॉल पार्सर को कार्यान्वित करने की कोशिश कर रहा हूं और मैं भाषा के लिए काफी नया हूं, खासकर जब यह मोनैड की बात आती है। मैं बाइनरी-0.5.0.2 का उपयोग कर रहा हूं और हेडर और मेरे प्रोटोकॉल के सभी पेलोड का वर्णन किया है। जिन संदेशों को मैं पार्स करना चाहता हूं वे निम्न जैसा दिखते हैं: हेडर + (पेलोड ए, पेलोड बी, ..) जहां हेडर में कोई फ़ील्ड निर्दिष्ट करता है कि संदेश किस प्रकार का पेलोड है।हास्केल बाइनरी पार्सिंग

मुझे बाइटस्ट्रिंग में पहला संदेश पार्स करने में सफलता मिली है, लेकिन मुझे पहले संदेश को पढ़ने में पढ़ने वाले बाइट्स को छोड़कर अगले संदेशों को पढ़ने के बारे में क्या नुकसान हुआ है।

यह अस्पष्ट हो सकता है, लेकिन मैं अपने बदसूरत कोड को इस तरह से काम करने के बजाय सामान्यीकृत पार्सर पर इनपुट प्राप्त करना चाहता हूं।

मदद

उत्तर

6

के लिए धन्यवाद बस पार्स आपरेशन के एक दृश्य का उपयोग करें और वे इनपुट उपभोग के रूप में वे के साथ जाना होगा।

parseAll = do 
    hdr <- parseHeader 
    pa <- parsePayloadA 
    pb <- parsePayloadB 
    ... 
2

टपल Data.Binary.Get से runGetState द्वारा लौटाए का दूसरा तत्व शेष ByteString है। जब तक आपको कोई त्रुटि न हो या बाइट से बाहर न हो जाएं तब तक आप अपने पार्सर को लागू कर सकते हैं।

संबंधित मुद्दे