私の問題は本当に簡単だと思いますが、何時間も修正しようとしましたが、理解できないようです。私は 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);
}
}
}
非常に単純ですが、どういうわけか機能しません。よろしくお願いいたします。