在boost :: spirit中,我添加了基于示例roman的错误处理代码.
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_fusion.hpp>
#include <boost/spirit/include/phoenix_object.hpp>
#include <boost/foreach.hpp>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phoenix = boost::phoenix;
template <typename Iterator>
struct roman : qi::grammar<Iterator>
{
roman() : roman::base_type(start)
{
using qi::eps;
using qi::lit;
using qi::lexeme;
using qi::_val;
using qi::_1;
using ascii::char_;
// for on_error
using qi::on_error;
using qi::fail;
using phoenix::construct;
using phoenix::val;
start = +(lit('M') ) >> "</>";
on_error<fail>
(
start
, …Run Code Online (Sandbox Code Playgroud)