private Statement Statement(ProcedureBuilder pb) throws Exception {
        Statement retval = null;

        switch (this.Current_Token) {
            case TOK_VAR_STRING:
            case TOK_VAR_NUMBER:
            case TOK_VAR_BOOL:
                retval = ParseVariableDeclStatement(pb);
                GetNext();
                return retval;
            case TOK_PRINT:
                retval = ParsePrintStatement(pb);
                GetNext();
                break;
            case TOK_PRINTLN:
                retval = ParsePrintLNStatement(pb);
                GetNext();
                break;
            case TOK_UNQUOTED_STRING:
                retval = ParseAssignmentStatement(pb);
                GetNext();
                return retval;
            case TOK_IF:
                retval = ParseIfStatement(pb);
                GetNext();
                return retval;

            case TOK_WHILE:
                retval = ParseWhileStatement(pb);
                GetNext();
                return retval;
            case TOK_RETURN:
                retval = ParseReturnStatement(pb);
                GetNext();
                return retval;
            default:
                throw new Exception("Invalid statement");

        }
        return retval;
    }