删除BOOST精神AST树的节点

时间:2013-10-01 08:35:52

标签: c++ tree boost-spirit

我有一个关于使用Boost Spirit Library生成的抽象语法树的问题。

我发现了很多关于在二进制搜索树中删除节点和子树的信息,但是我找不到与AST相同的信息。我在AS-Tree中有一个节点,该节点是完整树的子树的根。现在我想删除节点及其所有子节点。

我不知道该怎么做,而且Boost Spirit Documentation也没有帮助。

有人对我有任何提示吗?

使用(Boost 1.46.1)生成树:

tree_parse_info<> info = ast_parse(expression.c_str(), parser, skipparser);

表达式是这样的:

(variable_17 OR variable_18) AND function( variable_17) <= 30 OR function( subkey_18) <= 30

我用

tree_match<iterator_t>::tree_iterator tree_it = info.trees.begin();

获取树的开头,然后我检查其中一个子树是否多余(与删除本身没有任何关系)。 `然后我使用

遍历树

tree_match<iterator_t>::tree_iterator children_it = tree_it->children.begin()

并与其子项调用相同的函数(递归)。我无法发布完整的代码,但这是最重要的部分。我想,我可以遍历冗余子树的叶子节点,并将它们设置为null,或类似的东西。然后我再次上到树上,一个接一个地删除所有其他孩子。但是到目前为止还没有任何工作。

遍历树的示例:The Traversing 这就是答案。

如果我无法删除任何节点,是否有人有任何想法,如何根据现有树创建一个新树,滑动它的多余部分。

0 个答案:

没有答案