Spirit2覚書 | 16.78MHz

Spirit2覚書

昨日Twitterで何となくspiritの中でbind使いたくないなーと呟いたところ、ふじた先生から格好良い書き方を教わったので忘れないうちにまとめておく。
とりあえず、分かったのはspiritのList演算(%)が地味に便利だということ。AがBで区切られているリストを読むとき、馬鹿正直に
+( A >> B )

とか書くと返り値は
vector< tuple< A, B > >

なんてなかなかやらしい型で返ってくる。[]を使ってBを削れば良いんだけど、ここに空白を認めるとか色々ルールが入ってくると面倒くさくなってきて、
spirit::int_[ bind( &vector< int >::push_back, &array, _1 ) ]

必要なとこだけ抜き出せばいいや! とか考えたわけだけど、ドキュメントによると、A % Bの返す値の型はvector< A >らしい。
なにこれ、便利

で、なんかイマドキのSpiritにはPhoenixなるlambda的なものが備わっているらしい。この辺は後ほどがっつりドキュメントを読んでおく必要がありそう。

あと、どうもparseはphrase_parse同様最後の引数でパース結果を受け取れるらしい。phrase_parseだけの機能かと思ってた。変な質問してゴメンナサイ >アキラ先生