にゃははー

はへらー

Spirit.QiのList Parserで嵌ったこと

http://www.boost.org/doc/libs/1_51_0/libs/spirit/doc/html/spirit/qi/reference/operator/list.html

Spirit.Qiには a % b というList Parserがあるが、これを使ってて嵌った。

ドキュメントには

The list operator, a % b, is a binary operator that matches a list of one or more repetitions of a separated by occurrences of b. This is equivalent to a >> *(b >> a). 

と書いてあるので特に何も考えずに使ってた。

が、実際に使ってみるとattributeに格納されるのがなんかおかしい。bにマッチした部分が格納されない。

もう一度ドキュメントを見直してみると下の方に

a: A, b: B --> (a % b): vector<A>
a: Unused, b: B --> (a % b): Unused

と書いてある。vector<A>...?????

はー困った。ということで便利なんだけどbにマッチする部分は欲しいので、仕方ないので a >> *(b >> a) を使うしかない。
哀しいかな。