he estado utilizando con éxito a boost::spirit::qi
para analizar una corriente que consiste en los analizadores integrados (por ejemplo byte_
, little_word
, etc). Sin embargo, ahora necesito analizar datos que no caigan en una de estas categorías. Por ejemplo, me gustaría convertir un 16.16 número binario de punto fijo en un doble; p.ej. entonces little_word << little_16p16
analizaría un uint16_t
seguido por un double
(analiza desde un número de punto fijo).Cambiar tipo de atributo al analizar binario con impulso :: espíritu
Primero consideré acciones semánticas, pero (creo ...) que no son apropiadas porque no cambian el tipo del atributo asociado con un analizador. Tampoco puedo encontrar la manera de adaptar el employee struct-parsing example a esta situación porque se basa en conversiones implícitas proporcionadas por boost::fusion
. Ese enfoque no funcionará aquí porque obviamente no puedo definir un elenco implícito de uint32_t
a double
sin causar problemas importantes.
Mi inclinación es que necesito agregar no terminales para envolver los analizadores primitivos binarios integrados o escribir un analizador de terminales desde cero. Incluso después de ver la fuente de qi_binary.hpp
, no estoy seguro de cómo hacerlo. ¿Podría alguien proporcionar algún código de muestra y/o dirigirme a las referencias relevantes para comenzar?
Gracias! Pude obtener su código de muestra para hacer exactamente lo que quería eliminando el parámetro de plantilla 'ascii :: space_type' y sustituyendo la función' operator() 'apropiada. –