我很难理解为什么以下解析器无法解析test。调用qi::phrase_parse,result为真后,it2指向字符串的末尾,但mynr仍为 0:
std::string test = "#define SOMEMACRO 8.0";
auto it2 = test.begin();
auto endIt2 = test.end();
double mynr = 0;
bool result =
qi::phrase_parse(
it2,
endIt2,
("#define" >> (*qi::alnum) >> qi::double_[ref(mynr) = qi::_1]),
qi::space);
我怀疑它qi::alnum与空间跳过有关。
我尝试将我的案例简化为单个组件。我分别验证了这三个解析器,发现:
- “#define”确实消耗了“#define”
(*qi::alnum)能够消费SOMEMACROqi::double_能够消费8.0
单独地,每个解析器都可以正常工作,但是以上面的形式组合在一起却很奇怪。进一步的小测试似乎向我表明,(*qi::alnum)当我使用它时,它似乎消耗的不仅仅是SOMEMACRO,而是字符串的其余部分。