Ho utilizzato con successo boost::spirit::qi
per analizzare un flusso costituito dai parser incorporati (ad esempio byte_
, little_word
, ecc.). Tuttavia, ora devo analizzare i dati che non rientrano ordinatamente in una di queste categorie. Per esempio, mi piacerebbe convertire un numero binario a 16,16 punti fissi in un doppio; per esempio. quindi little_word << little_16p16
analizzerebbe uno uint16_t
seguito da uno double
(analizza da un numero a virgola fissa).Modifica il tipo di attributo durante l'analisi di binario con boost :: spirit
Prima ho considerato le azioni semantiche, ma (penso ...) che non sono appropriate perché non cambiano il tipo di attributo associato a un parser. Non riesco nemmeno a capire come adattare lo employee struct-parsing example a questa situazione perché si basa su trasmissioni implicite fornite da boost::fusion
. Questo approccio non funzionerà qui perché ovviamente non è possibile definire un cast implicito da uint32_t
a double
senza causare problemi importanti.
La mia inclinazione è che ho bisogno di aggiungere non-terminali per avvolgere i parser binari primitivi built-in o scrivere un parser terminale da zero. Anche dopo aver visto la fonte di qi_binary.hpp
, non sono sicuro di come fare. Qualcuno potrebbe fornire qualche codice di esempio e/o indirizzarmi ai riferimenti pertinenti per iniziare?
Grazie! Sono riuscito a far sì che il codice di esempio eseguisse esattamente ciò che volevo rimuovendo il parametro del template 'ascii :: space_type' e sostituendo la funzione' operator() 'appropriata. –