2011-04-01 4 views
5

J'ai essayé d'implémenter un analyseur de protocole dans haskell et je suis assez nouveau dans le langage, surtout quand il s'agit de monades. J'ai utilisé binary-0.5.0.2 et ai décrit l'en-tête et toutes les charges utiles de mon protocole. les messages que je voudrais analyser ressemblent à quelque chose comme ceci: en-tête + (charge utile A, charge utile B, ..) où un champ dans l'en-tête spécifie quel type de charge utile le message a.Haskell Binary Parsing

J'ai réussi à analyser le premier message de la chaîne d'octets, mais je ne sais pas comment lire les messages suivants, en ignorant les octets lus lors du traitement du premier message.

Cela peut être plutôt vague, mais je préfère obtenir des entrées sur un analyseur généralisé plutôt que d'avoir mon code moche modifié pour fonctionner de cette manière.

Merci pour l'aide

Répondre

6

suffit d'utiliser une séquence d'opérations parse et ils consommeront l'entrée comme ils vont le long.

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

Le second élément du tuple retourné par runGetState de Data.Binary.Get est le reste ByteString. Vous pouvez simplement continuer à appliquer votre analyseur jusqu'à ce que vous obteniez une erreur ou que vous manquiez d'octets.