我尝试将一些分层数据解析为 boost::utree 结构,但它似乎不像expexted那样工作。这就是我所做的:
qi::rule<const char*, utree(), chars::space_type> inner, outer;
outer %= '<' > qi::int_ > *inner > '>';
inner %= outer | qi::as_string[qi::lexeme[+(chars::alnum - '>')]];
const char txt[] = "<21 hello <34 some> strange <12 world>>";
const char* txtIt = txt;
try {
if (qi::phrase_parse(txtIt, txt + strlen(txt), outer, chars::space, data))
{
std::cout << "Numbers parsed" << std::endl;
HGrammar::traverseData()(data);
}
//return;
data.clear();
}catch(qi::expectation_failure<...>(...)) ...
其中 traverseData() 只是对 operator<<(cout, utree) 的调用。这就是我得到的:
(21“你好”34“一些”“奇怪”12“世界”)
然而,我希望 utree 反映输入到短语解析()中的字符串的嵌套性质。喜欢:
(21“你好”(34“一些”)“奇怪”(12“世界”))
我如何获得这种输出?
PS 在 Visual Studio 2010 中使用 boost 1.49.0