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