Boost 简单行,不同类型的转义元素

Boost 简单行,不同类型的转义元素,boost,boost-spirit,boost-spirit-qi,Boost,Boost Spirit,Boost Spirit Qi,我想用boost::spirit解析以下行 0 "a" "b" "c" 我创建了如下规则: qi::rule<std::string::const_iterator, std::string()> escaped_ = qi::char_('"') >> *(qi::char_ - qi::char_('"')) >> qi::char_('"'); int id; std::string v1,v2,v3; qi::phrase_parse(be

我想用boost::spirit解析以下行

0  "a"  "b"  "c"
我创建了如下规则:

qi::rule<std::string::const_iterator, std::string()> escaped_ = qi::char_('"') >> *(qi::char_ - qi::char_('"')) >> qi::char_('"');

int id;
std::string v1,v2,v3;

qi::phrase_parse(bein, end, (qi::int_ >> escaped_ >> escaped_ >> escaped_ >> qi::eol), id, v1, v2, v3);
qi::rule-escaped\uqi=char\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
int-id;
std::字符串v1、v2、v3;
qi::短语解析(bein,end,(qi::int\u>>转义的\u>>转义的\u>>qi::eol),id,v1,v2,v3);

但是解析失败了,我不知道为什么。希望有人能帮上忙。

短语解析需要(it,it,parser,skipper[,attribute…])。您忘记传递skipper:

bool ok = qi::phrase_parse(begin, end, (qi::int_ >> escaped_ >> escaped_ >> escaped_ >> qi::eol), qi::blank, id, v1, v2, v3);
我建议使用
qi::blank
,因为你的语法将
eol
视为重要(跳过它将永远不会匹配)

注意规则
qi::rule
巧妙地省略了skipper,因此它隐式地是一个
lexeme[]

qi::rule<It, std::string(), qi::blank_type> escaped_ = qi::lexeme['"' >> *(qi::char_ - '"') >> '"'];
印刷品

Parse succeeded: 0 'a' 'b' 'c'

很抱歉再次与您联系,是否有可能使用Skype?或者不公开聊天?
Parse succeeded: 0 'a' 'b' 'c'