#include #include #include "map.hpp" namespace qi = boost::spirit::qi; namespace qi_repo = boost::spirit::repository::qi; namespace ascii = boost::spirit::ascii; int main(int argc, char **argv) { using boost::spirit::ascii::space; typedef std::string::const_iterator iter_type; using qi::_a; using qi::_1; qi::rule id = qi::lexeme[*(ascii::alnum | '_')], one = id, two = id >> ',' >> id; typedef qi::rule term_type; std::map keymap; keymap[1] = &one; keymap[2] = &two; qi::rule > start = *(qi_repo::map(keymap)[qi::int_][_a = _1] >> qi::lazy(*_a)); std::string str = "1 only\n1 again\n2 first,second\n0 ugh"; iter_type iter = str.begin(); iter_type end = str.end(); bool r = phrase_parse(iter, end, start, space); if (r && iter == end) { std::cout << "-------------------------\n"; std::cout << "Parsing succeeded\n"; std::cout << "-------------------------\n"; } else { std::string rest(iter, end); std::cout << "-------------------------\n"; std::cout << "Parsing failed\n"; std::cout << "stopped at: \": " << rest << "\"\n"; std::cout << "-------------------------\n"; } return 0; }