2012-04-25
■[C++][boost]Boost.Spirit.Qi のセマンティックアクションで std::string を受け取る
文字列をパースする場合、*qi::char_ のようなパーサを定義すると思いますが、これだと std::vector<char> で受け取る必要があります。
auto parser = '(' >> *(qi::char_ - ')') >> ')'; test_parser("(madohomu)", parser[[](std::vector<char> const& v){ // }]);
この場合、std::string で受け取るには qi::as_string を使用します。
[ソース]
#include <boost/spirit/include/qi.hpp> template <typename P> void test_parser(char const* input, P const& p, bool full_match = true){ using boost::spirit::qi::parse; char const* f(input); char const* l(f + strlen(f)); if (parse(f, l, p) && (!full_match || (f == l))) std::cout << "ok" << std::endl; else std::cout << "fail" << std::endl; } int main(){ namespace qi = boost::spirit::qi; auto parser = '(' >> *(qi::char_ - ')') >> ')'; test_parser("(madohomu)", qi::as_string[parser][[](std::string const& str){ std::cout << str << std::endl; }]); return 0; }
[出力]
madohomu ok
[boost]
- ver 1.49.0
[コンパイラ]
- g++ (GCC) 4.8.0 20120415 (experimental)
トラックバック - http://d.hatena.ne.jp/osyo-manga/20120425/1335351771
リンク元
- 24 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC8QFjAA&url=http://d.hatena.ne.jp/osyo-manga/20110211/1297443058&ei=S-6XT431Ou6ZiQe5yqySBg&usg=AFQjCNFogT2iqwTUdzIMDVonSmA4sML7Vg
- 15 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDUQFjAB&url=http://d.hatena.ne.jp/osyo-manga/20110210/1297328933&ei=S-6XT431Ou6ZiQe5yqySBg&usg=AFQjCNEjjCstWc1_RhI3ziWVYvk1FpSCLQ
- 12 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CEYQFjAC&url=http://d.hatena.ne.jp/osyo-manga/20100922/1285155026&ei=TgeYT4eAPc2diAeRsfjgBQ&usg=AFQjCNFO7z4b2F9NZDtTUJvBy_MwOETJDQ&sig2=ZnWu3taM_KJpXblwdvyq-g
- 10 http://pipes.yahoo.com/pipes/pipe.info?_id=04913f684f1141e0b48179f97811ce12
- 8 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CEIQFjAD&url=http://d.hatena.ne.jp/osyo-manga/20100926/1285441125&ei=tfWXT4fqD8fymAXHktGNBg&usg=AFQjCNHXKQKkWhscATWP56pxOv_r83SMUg
- 7 http://www.kaoriya.net/blog/2012/04/19
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CFEQFjAE&url=http://d.hatena.ne.jp/osyo-manga/20110510/1305008054&ei=EQqYT53RNNGyiQeN2Nn9BQ&usg=AFQjCNEKIfCewxz2Hqlm9Um7UJEnPsZENQ&sig2=nggdcgK4lE5VTde11NqJAA
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=2&ved=0CE0QFjAB&url=http://d.hatena.ne.jp/osyo-manga/20120417/1334589294&ei=rSOYT6qCK6mHmQX8zIDmBQ&usg=AFQjCNFh_HqgMcNGIzivbXrkGGRA4bUxGg&sig2=DT7u1bnor37i7v7m5f3Nsw
- 3 http://atnd.org/events/21925
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&ved=0CFwQFjAF&url=http://d.hatena.ne.jp/osyo-manga/20120310/1331308885&ei=Sg2YT5fdHYmKmQXusvSMBg&usg=AFQjCNHMMOb2TnTwbsT7w3krGVxG9pJiHw&sig2=hxQk0O5XK7-uWkSbSVWGVg