deque中的结构对象 - lisp / scheme interpreter

时间:2016-04-28 20:27:47

标签: c++ data-structures data-manipulation

我一直无法在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的函数。

0 个答案:

没有答案