tree::node::ptr parse_state(std::string expr, std::string const& context, symbol_table symbol_table, const parser::parse_policy& ppol) { if (expr == "") { tree::node::ptr p = tree::node::ptr(tree::node::null_node()); return p; } else { symbol_table.set_context(context); state_grammar g; state_ast my_ast; std::string::const_iterator iter = expr.begin(); std::string::const_iterator end = expr.end(); bool r = boost::spirit::qi::phrase_parse(iter, end, g, boost::spirit::ascii::space, my_ast); if (r && iter == end) { return make_state_tree(my_ast, symbol_table,ppol); } else { /** * error handle : precise as to when the parser fails * (part of the predicate fails) */ throw basic_exception("Could not parse predicate:\n" + expr + "\n" + std::string(iter-expr.begin(),' ') + "^"+ std::string(iter, end)); } } }