Я успешно использовал boost::spirit::qi
для анализа потока, состоящего из встроенных анализаторов (например, byte_
, little_word
и т. Д.).Однако теперь мне нужно проанализировать данные, которые не подпадают под одну из этих категорий.Например, я хотел бы преобразовать двоичное число с фиксированной запятой 16.16 в двойное число;например, little_word << little_16p16
будет анализировать uint16_t
, за которым следует double
(синтаксический анализ числа с фиксированной точкой).
Сначала я рассмотрел семантические действия, но (я думаю ...), что онине подходит, потому что они не изменяют тип атрибута, связанного с анализатором.Я также не могу понять, как адаптировать *1000* пример структурного анализа сотрудников к этой ситуации, потому что он опирается на неявное приведение, предоставленное boost::fusion
.Этот подход не будет работать здесь, потому что я, очевидно, не могу определить неявное приведение от uint32_t
до double
, не вызывая серьезных проблем.
Я склонен к тому, что мне нужно добавить нетерминалы для переносавстроенные двоичные примитивные парсеры или написать терминальный парсер с нуля.Даже глядя на источник qi_binary.hpp
, я не уверен, как это сделать.Может ли кто-нибудь предоставить пример кода и / или направить меня к соответствующим ссылкам, чтобы начать?