Boost 简单行,不同类型的转义元素
我想用boost::spirit解析以下行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
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'