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 );