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

        try {
            // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:208:2: ( ( exceptionHandler )+ ( finallyClause )? | finallyClause )
            int alt30=2;
            int LA30_0 = input.LA(1);

            if ( (LA30_0==85) ) {
                alt30=1;
            }
            else if ( (LA30_0==86) ) {
                alt30=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 30, 0, input);

                throw nvae;
            }
            switch (alt30) {
                case 1 :
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:208:4: ( exceptionHandler )+ ( finallyClause )?
                    {
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:208:4: ( exceptionHandler )+
                    int cnt28=0;
                    loop28:
                    do {
                        int alt28=2;
                        int LA28_0 = input.LA(1);

                        if ( (LA28_0==85) ) {
                            alt28=1;
                        }


                        switch (alt28) {
                    	case 1 :
                    	    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:208:4: exceptionHandler
                    	    {
                    	    pushFollow(FOLLOW_exceptionHandler_in_exceptionGroup1072);
                    	    exceptionHandler();

                    	    state._fsp--;


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt28 >= 1 ) break loop28;
                                EarlyExitException eee =
                                    new EarlyExitException(28, input);
                                throw eee;
                        }
                        cnt28++;
                    } while (true);

                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:208:22: ( finallyClause )?
                    int alt29=2;
                    int LA29_0 = input.LA(1);

                    if ( (LA29_0==86) ) {
                        alt29=1;
                    }
                    switch (alt29) {
                        case 1 :
                            // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:208:22: finallyClause
                            {
                            pushFollow(FOLLOW_finallyClause_in_exceptionGroup1075);
                            finallyClause();

                            state._fsp--;


                            }
                            break;

                    }


                    }
                    break;
                case 2 :
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:209:4: finallyClause
                    {
                    pushFollow(FOLLOW_finallyClause_in_exceptionGroup1081);
                    finallyClause();

                    state._fsp--;


                    }
                    break;

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