4

私の問題は本当に簡単だと思いますが、何時間も修正しようとしましたが、理解できないようです。私は ast ツリー (boost-library で作成) を持っており、それを再帰で反復しています。実際のノードの番号、実際のノードの名前、および実際のノードの親ノードであるノードを含む NodeDescriptions のリストにすべてのノードを保存しています。ただし、親ノードの番号は常に間違っています。変数のスコープで何か間違ったことをしている、間違った方法で渡している、またはこのようなことをしていると思います。誰かが私を助けてくれたらうれしいです:

void convert_to_parsetree(BOOST_SPIRIT_NAMESPACE::tree_match<iterator_t>::const_tree_iterator parse_node, int calNode) {
   int remNum = calNode;
   std::string node_value(parse_node->value.begin(), parse_node->value.end());
   //First Element: Node-Counter, Second Element, Name of Node, Third Element: Parent Node Number
   myList.push_back(NodeDescription(counter++, node_value, remNum));

   if (parse_node->children.size() > 0) {

        if (parse_node->children.size() > 1) {
            //std::string value(parse_node->children[0].value.begin(), parse_node->children[0].value.end());
            //std::string value2(parse_node->children[1].value.begin(), parse_node->children[1].value.end());

            BOOST_SPIRIT_NAMESPACE::tree_match<iterator_t>::const_tree_iterator children_it = parse_node->children.begin();
            for (int i = 0; i < parse_node->children.size(); ++i) {
                convert_to_parsetree(children_it, counter);
                children_it++;
            }
        } else {
            convert_to_parsetree(parse_node->children.begin(), counter);
        }
    }
}

非常に単純ですが、どういうわけか機能しません。よろしくお願いいたします。

4

1 に答える 1