public void assignmentStatement()
    {
        String id;
        SemanticRec varId;
        SemanticRec exp;
        SemanticRec symTable = new SemanticRec(RecordType.SYM_TBL, symboltables.peek().getScopeName(), ""
                + symboltables.peek().getNestingLevel(), "" + symboltables.peek().getTableSize());
        debug();
        switch (lookAhead.getType())
        {
        case MP_IDENTIFIER: {
            Row assign = analyzer.findSymbol(lookAhead.getLexeme());

            if (assign == null) {
                semanticError("Undeclared identifier " + lookAhead.getLexeme() + " found.");
            } else {
                if (assign.getClassification() == Classification.VARIABLE
                        || assign.getClassification() == Classification.PARAMETER) {
                    //49 AssignmentStatement -> VariableIdentifier mp_assign Expression
                    out.println("49");
                    id = variableIdentifier();
                    varId = new SemanticRec(RecordType.IDENTIFIER, assign.getClassification().toString(), id);
                    match(TokenType.MP_ASSIGN);
                    exp = expression(null);
                    //#gen_assign(varId, exp)
                    analyzer.gen_assign(varId, exp, symTable);
                } else if (assign.getClassification() == Classification.FUNCTION) {
                    //50 AssignmentStatement -> FunctionIdentifier mp_assign Expression
                    out.println("50");
                    id = functionIdentifier();
                    varId = new SemanticRec(RecordType.IDENTIFIER, assign.getClassification().toString(), id);
                    match(TokenType.MP_ASSIGN);
                    exp = expression(null);
                    //#gen_assign(funcId, exp) //pushes the value on the stack
                    analyzer.gen_assign(varId, exp, symTable);
                } else {
                    semanticError("Cannot assign value to a Procedure"); //TODO: you can assign to parameter
                }
            }
        }

        break;
        default:
            syntaxError("identifier");
        }
    }