C ++程序在执行时崩溃

时间:2014-05-27 20:43:39

标签: c++ parsing

我正在使用代码块,我正在做一个小编译器,这是一个任务。

目前我在做Parser。

所以在这个问题中我使用的是3个文件:Lexer.h Token.h Parser.h

我的问题是:

我有一个Vector,其中充满了tokens示例int real,字符串所有这些将被放入解析器(我也在设计)中,以查看它是否适合EBNF的集合我有。

问题出在这里。

向量位于Lexer.h。 现在,在Parser.h中,我创建了一个名为NextToken()的方法的用户,该方法位于Lexer.h中。这个方法的工作是获取在Vector中找到的下一个Token并返回它,这样我就可以比较它以查看它是否好。

现在,当我尝试使用Token.h中设置的Getter获取某些信息时,例如tk -> getType(),程序看起来像是在一个循环中,在大约1秒内,它崩溃了。

知道它崩溃的原因吗?

这是编码:[部分编码]

Lexer.h


vector<Token> tokensUsed; // Vector containing the Tokens
vector<Token>::iterator it;  // Iterator 
Token* itrToken; 

 Token* nextToken()
            {
                if (it!= tokensUsed.end())
                {
                    // we Assigned what is found in the iterator it (of the vector)
                    // so we get the data found in that pointer
                    itrToken = &*this->it;
                    //Move Iterator forward
                    it ++;
                    return itrToken;
                }
            }

Token.h


Token ()
{

}


Token (int type, string sBuffer, int rRow, int cCol)
{
    this->tType = type;
    this->strBuffer = sBuffer;
    this->row = rRow;
    this->col = cCol;
}

// Since it points to a pointer in the memory, this will get the element FROM the memory
// by passing the Pointer Token from the lexer.h
Token (Token* getT)
{
    this-> tType = getT -> tType;
    this->strBuffer = getT -> strBuffer;
    this->row = getT -> row;
    this->col = getT -> col;
}


//Getters
//Will return the corresponding data according to the function of that particular token

//Return the type [enum] of the token
int getType ()
{
    return this->tType;
}

//return the string contents
string getBuffer()
{
    return this->strBuffer;
}

//return row
int getRow()
{
    return row;
}

//return col
int getCol ()
{
    return col;
}

Parser.h


会给你一个崩溃的方法

    void TypeNode()
    {

        //Create New Token
        Token* tk = nextToken();
        valueType = tk -> getType();
        valueString = tk -> getBuffer();

        //Create Node
        cout << "Type Node:  " << valueType << "  " << valueString << endl;
        //ASTNode* tNode = new ASTNode(valueType, valueString);

    }

ASTNODE现在已经发表评论,因为我现在正在测试cout

编辑:我编辑了代码Christian Rapp告诉我:但每当我尝试执行此事时:

Error

1 个答案:

答案 0 :(得分:0)

nextToken功能严重受损。

  1. 您正在复制令牌,但您的Token类没有复制构造函数。
  2. 如果if返回false,则您没有返回值。
  3. 您正在设置itrToken(全局)但返回itr(未定义的本地)。
  4. 缺少复制构造函数可能是导致您崩溃的最大问题,似乎是第二个令牌。