나는 간단한 수학 파서를 연구 중이다. 단지 읽는 것 number = 1 + 2;
C++ 벡터 및 분할 오류
나는이 토큰들을 포함하고있는 벡터를 가지고있다. 그들은 문자의 유형과 문자열 값을 저장합니다. 나는이 토큰의 AST를 구축하기 위해 벡터를 단계별로 실행하려고 노력 중이다. 그리고 코드가 이런 일이 일어나지 않도록해야한다고 생각하는 경우에도 세그먼테이션 오류가 계속 발생한다. 여기
는 인 AST 빌드 코드의 비트 :struct ASTGen
{
const vector<Token> &Tokens;
unsigned int size,
pointer;
ASTGen(const vector<Token> &t) : Tokens(t), pointer(0)
{
size = Tokens.size() - 1;
}
unsigned int next()
{
return pointer + 1;
}
Node* Statement()
{
if(next() <= size)
{
switch(Tokens[next()].type)
{
case EQUALS
:
Node* n = Assignment_Expr();
return n;
}
}
advance();
}
void advance()
{
if(next() <= size) ++pointer;
}
Node* Assignment_Expr()
{
Node* lnode = new Node(Tokens[pointer], NULL, NULL);
advance();
Node* n = new Node(Tokens[pointer], lnode, Expression());
return n;
}
Node* Expression()
{
if(next() <= size)
{
advance();
if(Tokens[next()].type == SEMICOLON)
{
Node* n = new Node(Tokens[pointer], NULL, NULL);
return n;
}
if(Tokens[next()].type == PLUS)
{
Node* lnode = new Node(Tokens[pointer], NULL, NULL);
advance();
Node* n = new Node(Tokens[pointer], lnode, Expression());
return n;
}
}
}
};
...
ASTGen AST(Tokens);
Node* Tree = AST.Statement();
cout << Tree->Right->Data.svalue << endl;
내가 Tree->Data.svalue
에 액세스하고 =
노드의 토큰 정보를 얻을, 그래서 그 노드가 양산지고 알 수 있습니다 또한 Tree->Left->Data.svalue
을 가져와 변수의 왼쪽에있는 변수를 가져올 수 있습니다. =
여러 번 반복하여 벡터를 단계별로 시도했지만 여러 번 다시 시도했습니다. 노드 =
(노드는 +
이어야 함)에 액세스하려고하면 세그먼트 화 오류가 발생합니다.
대단히 감사하겠습니다.
그의'Expression()'함수는 값을 반환하지 않는 코드 경로도 가지고 있습니다. – Blastfurnace
예, 그렇습니다! –
나는 이것을 깨닫습니다. 그러나 지금 당장은 이것이 숫자 = 1 + 2; 또는 적어도 atleast에 대해 올바르게 작동해야하므로 걱정하지 않았습니다. 그것은 희망이었습니다. 이 테스트 케이스가 해결되면 다른 컨트롤 경로가 완성됩니다. – grep