Пример #1
0
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));
		}
	}
}