嵌套的乌树与提升::精神::气
nested utree with boost::spirit::qi?
我尝试将一些分层数据解析为 boost::utree 结构,但它似乎没有像 expexex.这就是我所做的:
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() 只是对运算符<<(cout, utree) 的调用。这就是我得到的:
( 21 "你好" 34 "一些" "奇怪" 12 "世界" )
然而,我希望 utree 反映馈入 phrase_parse() 的字符串的嵌套性质。喜欢:
( 21 "你好" ( 34 "一些" ) "奇怪" ( 12 "世界")
)
如何获得这种输出?
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 在与语义操作结合使用时无法传播其属性值。
相关文章:
- 嵌套在类中时无法设置成员数据
- 无法访问嵌套类.类的使用无效
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 在C++中搜索嵌套多映射值
- 在C++中将矢量转换为嵌套地图
- C++嵌套if语句,基本货币交换
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 嵌套的匿名命名空间
- 了解嵌套循环打印星号图案
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 嵌套for循环C++的问题(初学者)
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 用C#中的并集模拟C++嵌套结构
- 部分专业化和嵌套模板
- 嵌套While循环不起作用(C++问题)
- C++-模板嵌套类的引用初始化无效
- 嵌套的乌树与提升::精神::气
- 以boost精神分析嵌套数据