我对提升精神队长有困难.
我需要解析一个这样的文件:
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)