我正在使用代码块,我正在做一个小编译器,这是一个任务。
目前我在做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秒内,它崩溃了。
知道它崩溃的原因吗?
这是编码:[部分编码]
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 ()
{
}
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;
}
会给你一个崩溃的方法
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告诉我:但每当我尝试执行此事时:
答案 0 :(得分:0)
nextToken
功能严重受损。
Token
类没有复制构造函数。if
返回false,则您没有返回值。itrToken
(全局)但返回itr
(未定义的本地)。缺少复制构造函数可能是导致您崩溃的最大问题,似乎是第二个令牌。