【发布时间】:2014-03-24 10:24:45
【问题描述】:
#include <iostream>
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
int main ()
{
using qi::string;
std::string input("a");
std::string::iterator strbegin = input.begin();
std::string p;
bool ok = qi::phrase_parse(strbegin, input.end(),
((string("a") >> string("a")) | string("a")),
qi::space,
p);
if (ok && strbegin == input.end()) {
std::cout << p << std::endl;
std::cout << p.size() << std::endl;
} else {
std::cout << "fail" << std::endl;
std::cout << std::string(strbegin, input.end()) << std::endl;
}
}
这个程序输出aa。这怎么可能?输入字符串为a。解析器应匹配 aa 或 a。我写了string("a") 只是为了测试操作员。
使用char_而不是string时也是如此。
【问题讨论】:
-
刚刚偶然发现这个非常相似的问题:stackoverflow.com/q/13869978/85371
标签: c++ parsing boost boost-spirit boost-spirit-qi