我一直无法在c ++的deque中创建新结构的实例。这是我自己尝试使用lisp / scheme解释器。
以下是我的代码:
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++;
}
}
令牌是一种包含字符串的双端队列类型,这些字符串是如此分解的各种令牌
{“(”,“define”,“function”,“(”,“x”,“y”,“)”,“)”}
用逗号分隔标记。 temp和counter变量是全局int。 树变量是一个类似的结构(带有全局显示)在头文件中:
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";
}
此评估函数目前尚未开发,直到我可以正确解析用户输入。
有人有什么建议吗?任何建议表示赞赏
如果您想知道main函数,它只是一个解析用户输入的函数,并调用一个导致标记化字符串deque的函数。