Изменить тип атрибута при анализе двоичного файла с помощью boost::spirit

Я успешно использовал 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я тоже не уверен, как это сделать. Может ли кто-нибудь предоставить пример кода и/или направить меня к соответствующим ссылкам, чтобы начать?

8
задан Michael Koval 15 March 2012 в 07:09
поделиться