我很难理解为什么以下解析器无法解析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)
能够消费SOMEMACRO
qi::double_
能够消费8.0
单独地,每个解析器都可以正常工作,但是以上面的形式组合在一起却很奇怪。进一步的小测试似乎向我表明,(*qi::alnum)
当我使用它时,它似乎消耗的不仅仅是SOMEMACRO
,而是字符串的其余部分。