小编aud*_*ric的帖子

提升精神船长问题

我对提升精神队长有困难.

我需要解析一个这样的文件:

ROW int
int [int, int]
int [int, int]
...
Run Code Online (Sandbox Code Playgroud)

只有在第一个int之后添加'_'时,我能够毫无问题地解析它(感谢stackoverflow;).

事实上,我认为船长在第一个int之后吃了行尾,所以第一个和第二个(在第二行)看起来只有一个int.我不明白如何保持eol但是吃空间.我找到了使用自定义解析器的示例,如此此处.

我尝试了qi :: blank,自定义解析器,单一规则点亮('')无论我使用什么队长,空间和eol总是吃.

我的语法是:

一行:

struct rowType
{
    unsigned int number;
    std::list<unsigned int> list;
};
Run Code Online (Sandbox Code Playgroud)

存储在结构中的完整问题:

struct problemType
{
    unsigned int ROW;
    std::vector<rowType> rows;
};
Run Code Online (Sandbox Code Playgroud)

行解析器:

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; …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-spirit boost-spirit-qi

7
推荐指数
1
解决办法
4094
查看次数

标签 统计

boost ×1

boost-spirit ×1

boost-spirit-qi ×1

c++ ×1