boost::spirit (classic): разница между | и ^?

Док говорит (дух классика):

a | b, Union, Match a or b. Also referred to as alternative

a ^ b, XOR, Match a or b, but not both.

Кто-нибудь может дать мне практический пример, когда это имеет значение?

РЕДАКТИРОВАТЬ: Дайте мне практический пример, пожалуйста. Создай правило, используй актеров, разбери что-нибудь и покажи мне разницу. Я знаю, что такое OR и XOR, но я не вижу никакой разницы в результатах boost:: spirit между | и ^.

std::string t; boost::spirit::classic::rule<> r = ( ch_p( 'a' ) ^ ch_p( 'b' ) )[ assign_a( t ) ]; //boost::spirit::classic::rule<> r = ( ch_p( 'a' ) | ch_p( 'b' ) )[ assign_a( t ) ]; boost::spirit::classic::parse( "when it matters?", r );

1 ответ

Оператор ^ (XOR) в boost::spirit создает 'исключительную или' комбинацию парсеров. Я не получил это, потому что я вставил предмет в парсеры str_p/ch_p.

Кредиты @llonesmiz, от которых я получил лучший пример:

parse( "Z", alpha_p ^ xdigit_p );

Другие вопросы по тегам