【发布时间】:2013-03-22 14:56:43
【问题描述】:
我很难理解为什么以下解析器无法解析 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,而是字符串的其余部分。
【问题讨论】:
标签: c++ boost boost-spirit boost-spirit-qi