首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套助推::精神::气?

嵌套助推::精神::气?
EN

Stack Overflow用户
提问于 2012-06-05 09:17:05
回答 1查看 539关注 0票数 2

我试图将一些层次数据解析为boost::utree结构,但它似乎并不像删除的那样工作。我就是这样做的:

代码语言:javascript
复制
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能够反映phrase_parse()中输入的字符串的嵌套性质。比如:

( 21 "hello“( 34 "some”)“奇怪”( 12 "world“))

怎样才能得到这样的输出?

PS与2010一起使用boost 1.49.0

EN

回答 1

Stack Overflow用户

发布于 2012-06-06 15:08:13

很简单..。我只需将“外气”规则的声明改为:

代码语言:javascript
复制
qi::rule<const char*, utree::list_type(), chars::space_type> outer;

因此,将规则的属性类型更改为utree::list_type。但我不知道为什么这样做..。

在boost 1.47.0中,还有另一个bug,当与语义操作一起使用时,utree无法传播其属性值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10894632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档