Я делаю дерево синтаксического анализа для простого интерпретатора. Вот код для узла в моем дереве разбора:Вектор динамического доступа C++ в векторе
struct rtok {
std::string type;
std::string val;
};
struct rnode {
rtok tok;
vector<rnode> child;
} node;
vector<rnode> ptree;
Как вы можете видеть, мое дерево разбора просто «вектор векторов». У меня также есть функции для вставки нового узла в дерево синтаксического разбора:
void add_term(rtok tok) {
rnode n;
n.tok = tok;
ptree.back().child.push_back(n);
}
Но проблема этой функции, она вставляет только элементы в ребенке вектор первого вектора. Т.е. как я могу заставить свою функцию динамически добавлять больше детей в дерево разбора? то есть Как я могу сделать свою функцию сделать что-то вроде этого:
ptree.back().child.back().child.back()...push_back(n)
Если есть способ динамического добавления child.back()
, что было бы здорово! Очевидно, я не думаю, что есть, но я надеюсь, что это иллюстрирует мою мысль.
Пробовал ли вы использовать цикл или рекурсию? Я рекомендую. – user2079303
@ user2079303 Я думал об этом, но я не был уверен, как бы я динамически добавлял «child.back()» в конец каждый раз, когда он зацикливался. – Francis