public final ANTLRv3TreeFilter.rewrite_tree_alternative_return rewrite_tree_alternative() throws RecognitionException {
        ANTLRv3TreeFilter.rewrite_tree_alternative_return retval = new ANTLRv3TreeFilter.rewrite_tree_alternative_return();
        retval.start = input.LT(1);

        try {
            // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:433:5: ( ^( ALT ( rewrite_tree_element )+ EOA ) )
            // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:433:7: ^( ALT ( rewrite_tree_element )+ EOA )
            {
            match(input,ALT,FOLLOW_ALT_in_rewrite_tree_alternative2200); 

            match(input, Token.DOWN, null); 
            // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:433:13: ( rewrite_tree_element )+
            int cnt44=0;
            loop44:
            do {
                int alt44=2;
                int LA44_0 = input.LA(1);

                if ( ((LA44_0>=BLOCK && LA44_0<=POSITIVE_CLOSURE)||LA44_0==LABEL||LA44_0==TREE_BEGIN||(LA44_0>=TOKEN_REF && LA44_0<=ACTION)||LA44_0==RULE_REF) ) {
                    alt44=1;
                }


                switch (alt44) {
            	case 1 :
            	    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:433:13: rewrite_tree_element
            	    {
            	    pushFollow(FOLLOW_rewrite_tree_element_in_rewrite_tree_alternative2202);
            	    rewrite_tree_element();

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    if ( cnt44 >= 1 ) break loop44;
                        EarlyExitException eee =
                            new EarlyExitException(44, input);
                        throw eee;
                }
                cnt44++;
            } while (true);

            match(input,EOA,FOLLOW_EOA_in_rewrite_tree_alternative2205); 

            match(input, Token.UP, null); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }