2011-04-01 21 views
5

He estado intentando implementar un analizador de protocolos en haskell y soy bastante nuevo en el lenguaje, especialmente cuando se trata de mónadas. He estado usando binary-0.5.0.2 y he descrito el encabezado y todas las cargas de mi protocolo. los mensajes que me gustaría analizar se parecen a los siguientes: encabezado + (carga A, carga B, ..) donde un campo en el encabezado especifica qué tipo de carga tiene el mensaje.Haskell Binary Parsing

He tenido éxito en el análisis del primer mensaje en la cadena de bytes, pero no entiendo cómo leer los mensajes siguientes, descartando los bytes que se leyeron al procesar el primer mensaje.

Esto podría ser bastante vago, pero prefiero obtener información sobre un analizador generalizado que tener mi feo código alterado para que funcione de esta manera.

Gracias por la ayuda

Respuesta

6

sólo tiene que utilizar una secuencia de operaciones de análisis sintáctico y consumirán la entrada a medida que avanzan.

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

El segundo elemento de la tupla devuelta por runGetState de Data.Binary.Get es el ByteString restante. Simplemente puede seguir aplicando su analizador hasta que obtenga un error o se quede sin bytes.