Boost Spirit Qiでは ~ が文字群を反転するのに使えるが、これ自体はパーサではない2020年12月17日 12時45分16秒

Boost Spirit Qiでは ~ が文字群を反転するのに使えるが、これ自体はパーサではない。さて、この特異な演算しは What’s the Difference Between Qi’s ‘!’ and ‘~’? で説明されているが、「!」 や 「-」 等と違って、パーサでは無いので、boost のドキュメントにはのっていないのである。その為、チルダの動作を正しく把握するのにとても時間が掛かった。

チルダに付いての説明を抜粋。 The differences are more interesting. The unary Qi operator ‘~’ is applicable to character and character class parsers only. It negates the set of characters matched by the parser component it is attached to. Here are some examples:

Expression Description
~char_ does not match anything
~digit matches everything except digits
~char_(“a-z”) matches every character outside the character range spanned by ‘a’ and ‘z’
チルダは文字集合にのみ使える演算であると書いてある。その為、lit() に使っても効果は無い。ここら変が若干落し穴。それ以外は、文字集合の反転に使われるだけなのでパフォーマンス等の不利益は無い。