Как игнорировать атрибут токена из spirit :: Lex при использовании spirit :: qi?

Когда я использую эту грамматику приема ки от Лекса:

pair %=  token(ID_MARKER)
>> ':'
>> atom
>> ','
>> atom
;

в сочетании с этим сопоставлением fusion / tuple для помощи в захвате:

BOOST_FUSION_ADAPT_STRUCT(
Client::pair_rec,
(std::string,      m_dummy  )  // want to rid of this capture of ID_MARKER
(Client::atom_rec, m_atom_1 )
(Client::atom_rec, m_atom_2 )
)

все отлично работает

Но я хотел бы использовать ID_MARKER просто для разбора; Я действительно не нуждаюсь или не хочу захватить это.

Поэтому я попытался игнорировать атрибут с помощью qi::lit:

pair %=  qi::lit( token(ID_MARKER) )
>> ':'
>> atom
>> ','
>> atom
;

наряду с удалением m_dummy из захвата, но я просто получаю стену ошибок шаблона.

Что я должен делать вместо этого, чтобы очистить это?

1

Решение

Без кода для тестирования я не могу быть уверен, но:

pair %=  qi::omit[ token(ID_MARKER) ]
>> ':'
>> atom
>> ','
>> atom
;

должно сработать. Вы также можете добавить token_def<lex::omit> marker; в вашем лексере.

3

Другие решения

Других решений пока нет …