Impulsar los problemas de los patrones de espíritu

Tengo problemas con los saltadores de espíritus.

Necesito analizar un archivo como ese:

ROW int
int [int, int]
int [int, int]
...

Puedo analizarlo sin problemas (gracias a stackoverflow;) solo si agrego una '_' después de la primera int.

De hecho, creo que el patrón come el final de la línea después del primer int, por lo que el primero y el segundo (en la segunda línea) se ven como un solo int. No entiendo cómo mantener eol sino comer espacios. He encontrado ejemplos para usar un analizador personalizado comoaquí yaquí.

Intenté el analizador personalizado qi :: blank, con una sola regla encendida ('') No importa qué patrón utilice, el espacio y el eol siempre se comen.

Mi gramática es:

una línea:

struct rowType
{
    unsigned int number;
    std::list<unsigned int> list;
};

El problema completo almacenado en una estructura:

struct problemType
{
    unsigned int ROW;
    std::vector<rowType> rows;
};

el analizador de filas

template<typename Iterator>
struct row_parser : qi::grammar<Iterator, rowType(), qi::space_type>
{
    row_parser() : row_parser::base_type(start)
    {

        list  = '[' >> -(qi::int_ % ',') >> ']';
        start = qi::int_ >> list;
    }

    qi::rule<Iterator, rowType(), qi::space_type> start;
    qi::rule<Iterator, std::list<unsigned int>(), qi::space_type> list;
};

y el analizador de problemas:

template<typename Iterator>
struct problem_parser : qi::grammar<Iterator,problemType(),qi::space_type>
{

    problem_parser() : problem_parser::base_type(start)
    {
        using boost::phoenix::bind;
        using qi::lit;

        start = qi::int_ >> lit('_') >> +(row);

        //BOOST_SPIRIT_DEBUG_NODE(start);
    }

    qi::rule<Iterator, problemType(),qi::space_type> start;
    row_parser<Iterator> row;
};

Y lo uso así:

main() {
static const problem_parser<spirit::multi_pass<base_iterator_type> > p;
...
spirit::qi::phrase_parse(first, last ,
            p,
            qi::space,
            pb);
}

Por supuesto, el qi :: space es mi problema, y ​​una manera de resolverlo sería no usar un patrón, pero phrase_parse lo requiere, y luego mi analizador lo requiere.

Estoy atascado desde hace algunas horas ... Creo que es algo obvio que no he entendido.

Gracias por tu ayuda.

Respuestas a la pregunta(1)

Su respuesta a la pregunta