セマンティックアクションでBoost.Lambda
#include <iostream> #include <string> #include <boost/lambda/lambda.hpp> #include <boost/spirit/include/qi.hpp> namespace qi = boost::spirit::qi; using boost::lambda::_1; template <class Expr> bool parse(const std::string& s, const Expr& expr) { std::string::const_iterator first = s.begin(); return boost::spirit::qi::parse(first, s.end(), expr); } int main() { parse("(123)", '(' >> qi::int_[ std::cout << _1 << '\n' ] >> ')'); }
123
# イテレータを書かないためにparse()を自作するのがめんどくさい。