【发布时间】:2012-04-08 05:26:36
【问题描述】:
我正在开发一个简单的数学解析器。只是写着number = 1 + 2;
我有一个包含这些标记的向量。它们存储字符的类型和字符串值。我正在尝试逐步通过向量来构建这些标记的 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 并获取= 左侧的变量
我已经重写了很多次尝试不同的方法来遍历向量,但是当我尝试访问 = 右节点(应该是 + 节点)时,我总是遇到分段错误
任何帮助将不胜感激。
【问题讨论】:
标签: c++ vector segmentation-fault binary-tree abstract-syntax-tree