У меня были проблемы с созданием экземпляров новых структур внутри deque в c ++. Это моя собственная попытка интерпретатора LISP / схемы.
Вот код, который я имею ниже:
void store_info(stack_block *tree, deque<string> tokens){
cout << "level: " << counter << "\n";
while(temp != tokens.size()){
if(tokens[temp] == "("){
tree->lvl.push_back(tokens[temp]);
temp = temp + 1;
counter = counter + 1;
tree->branches.push_back(createstack());
store_info(tree2->branches.back(), tokens, index); //recursive call
}
else if(tokens[temp] == ")"){
tree->lvl.push_back(tokens[temp]);
temp = temp + 1;
return;
}
else {
tree->lvl.push_back(tokens[temp]);
temp++;
}
}
Tokens — это тип deque, содержащий строки, которые разбиты на разные токены
{«(«, «define», «function», «(«, «x», «y», «)», «)»}
где запятые разделяют токены. Переменные temp и counter являются глобальными целочисленными значениями.
Переменная дерева представляет собой такую структуру (с глобальным отображением) в заголовочном файле:
struct stack_block{ //holds the nested situations
deque<string> lvl;
deque<stack_block*> branches;
};
stack_block* createstack(){
stack_block *result = new stack_block;
return result;
};
int temp = 0;
int counter = 0;
Я пытался получить такие результаты:
./program
Level 1: ( define function (
Level 2: x y))
или же
./program
Level 1: define function (x y)
Level 2: xy)
Когда я на самом деле получаю это:
EVAL
Level 1:define function ( )
Вот как я печатаю следующую информацию:
string evaluate(deque<string> tokens, variables *functions, string u_input, stack_block *tree){
deque<stack_block*>::iterator j;
deque<string>::iterator i;
int k = 1;
cout << "\nEVAL\n";
for(j = tree->branches.begin(); j != tree->branches.end(); j++){
printf("Level %d:" , k);
for(i = (*j)->lvl.begin(); i != (*j)->lvl.end(); i++){
cout << *i << " ";
}
cout << "\n";
k++;
}
return "Something went wrong";
}
Эта функция оценки в настоящее время недостаточно развита, пока я не смогу правильно проанализировать вводимые пользователем данные.
У кого-нибудь есть предложения? Любой совет приветствуется
Если вас интересует основная функция, то это просто функция, анализирующая вводимые пользователем данные, и вызывающая функцию, которая приводит к удалению токенизированных строк.
Задача ещё не решена.
Других решений пока нет …