gpt4 book ai didi

c++ - 带有 boost::spirit::qi 的嵌套 utree?

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:37 24 4
gpt4 key购买 nike

我尝试将一些分层数据解析为 boost::utree 结构,但它似乎并没有像预期的那样工作。这就是我所做的:

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 "hello" 34 "some" "strange" 12 "world" )

但我希望 utree 反射(reflect)输入到 phrase_parse() 中的字符串的嵌套性质。喜欢:

( 21 "hello" ( 34 "some" ) "strange" ( 12 "world" ) )

我如何获得这种输出?

PS 使用 boost 1.49.0 和 Visual Studio 2010

最佳答案

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

qi::rule<const char*, utree::list_type(), chars::space_type> outer;

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

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

关于c++ - 带有 boost::spirit::qi 的嵌套 utree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10894632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com