C++ vector and segmentation faults

Posted by Headspin on Stack Overflow See other posts from Stack Overflow or by Headspin
Published on 2012-04-08T05:26:36Z Indexed on 2012/04/08 5:29 UTC
Read the original article Hit count: 220

I am working on a simple mathematical parser. Something that just reads number = 1 + 2;

I have a vector containing these tokens. They store a type and string value of the character. I am trying to step through the vector to build an AST of these tokens, and I keep getting segmentation faults, even when I am under the impression my code should prevent this from happening.

Here is the bit of code that builds the 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;

I can access Tree->Data.svalue and get the = Node's token info, so I know that node is getting spawned, and I can also get Tree->Left->Data.svalue and get the variable to the left of the =

I have re-written it many times trying out different methods for stepping through the vector, but I always get a segmentation fault when I try to access the = right node (which should be the + node)

Any help would be greatly appreciated.

© Stack Overflow or respective owner

Related posts about c++

Related posts about vector