Повысьте проблемы со шкипером
У меня проблемы с бодибилдером.
Мне нужно разобрать файл так:
ROW int
int [int, int]
int [int, int]
...
Я могу разобрать его без проблем (благодаря stackoverflow;), только если я добавлю '_' после первого инт.
На самом деле, я думаю, что шкипер съедает конец строки после первого int, поэтому первая и вторая (на второй строке) выглядят как только одно int. Я нене понимаю, как сохранить eol, но есть места. Я'Мы нашли примеры использования пользовательского парсера, такого какВот а такжеВот.
Я пробовал qi :: blank, пользовательский парсер с одним освещенным правилом (' ') Независимо от того, каким шкипером я пользуюсь, космос и eol всегда есть.
Моя грамматика:
строка:
struct rowType
{
unsigned int number;
std::list list;
};
полная проблема хранится в структуре:
struct problemType
{
unsigned int ROW;
std::vector rows;
};
анализатор строк:
template
struct row_parser : qi::grammar
{
row_parser() : row_parser::base_type(start)
{
list = '[' >> -(qi::int_ % ',') >> ']';
start = qi::int_ >> list;
}
qi::rule start;
qi::rule list;
};
и анализатор проблем:
template
struct problem_parser : qi::grammar
{
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 start;
row_parser row;
};
И я использую это так:
main() {
static const problem_parser p;
...
spirit::qi::phrase_parse(first, last ,
p,
qi::space,
pb);
}
Конечно, qi :: space - это моя проблема, и одним из способов решения этой проблемы было быя не использую шкипер, но длятекст_парсера требует его, а моему парсеру - один.
я застрял с некоторых часов ... я думаю, что этоЧто-то очевидное, что я неправильно понял.
Спасибо за вашу помощь.