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

        ANTLRv3TreeFilter.block_return block4 = null;

        ANTLRv3TreeFilter.atom_return atom5 = null;

        ANTLRv3TreeFilter.atom_return atom6 = null;

        ANTLRv3TreeFilter.ebnf_return ebnf7 = null;

        ANTLRv3TreeFilter.treeSpec_return treeSpec8 = null;


        try {
            // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:227:2: ( ^( ( '=' | '+=' ) ID block ) -> {$block.st} | ^( ( '=' | '+=' ) ID atom ) -> {$atom.st} | atom -> {$atom.st} | ebnf -> {$ebnf.st} | ACTION -> {%{\"epsilon\"}} | SEMPRED -> {%{\"[>SEMPRED<]\"}} | GATED_SEMPRED -> {%{\"[>GATED_SEMPRED<]\"}} | treeSpec -> {$treeSpec.st})
            int alt33=8;
            alt33 = dfa33.predict(input);
            switch (alt33) {
                case 1 :
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:227:4: ^( ( '=' | '+=' ) ID block )
                    {
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:227:6: ( '=' | '+=' )
                    int alt31=2;
                    int LA31_0 = input.LA(1);

                    if ( (LA31_0==71) ) {
                        alt31=1;
                    }
                    else if ( (LA31_0==87) ) {
                        alt31=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 31, 0, input);

                        throw nvae;
                    }
                    switch (alt31) {
                        case 1 :
                            // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:227:7: '='
                            {
                            match(input,71,FOLLOW_71_in_elementNoOptionSpec1171); 

                            }
                            break;
                        case 2 :
                            // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:227:11: '+='
                            {
                            match(input,87,FOLLOW_87_in_elementNoOptionSpec1173); 

                            }
                            break;

                    }


                    match(input, Token.DOWN, null); 
                    match(input,ID,FOLLOW_ID_in_elementNoOptionSpec1176); 
                    pushFollow(FOLLOW_block_in_elementNoOptionSpec1178);
                    block4=block();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 229:5: -> {$block.st}
                    {
                        retval.st = (block4!=null?block4.st:null);
                    }


                    }
                    break;
                case 2 :
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:231:4: ^( ( '=' | '+=' ) ID atom )
                    {
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:231:6: ( '=' | '+=' )
                    int alt32=2;
                    int LA32_0 = input.LA(1);

                    if ( (LA32_0==71) ) {
                        alt32=1;
                    }
                    else if ( (LA32_0==87) ) {
                        alt32=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 32, 0, input);

                        throw nvae;
                    }
                    switch (alt32) {
                        case 1 :
                            // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:231:7: '='
                            {
                            match(input,71,FOLLOW_71_in_elementNoOptionSpec1196); 

                            }
                            break;
                        case 2 :
                            // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:231:11: '+='
                            {
                            match(input,87,FOLLOW_87_in_elementNoOptionSpec1198); 

                            }
                            break;

                    }


                    match(input, Token.DOWN, null); 
                    match(input,ID,FOLLOW_ID_in_elementNoOptionSpec1201); 
                    pushFollow(FOLLOW_atom_in_elementNoOptionSpec1203);
                    atom5=atom();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 233:5: -> {$atom.st}
                    {
                        retval.st = (atom5!=null?atom5.st:null);
                    }


                    }
                    break;
                case 3 :
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:235:4: atom
                    {
                    pushFollow(FOLLOW_atom_in_elementNoOptionSpec1219);
                    atom6=atom();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 237:5: -> {$atom.st}
                    {
                        retval.st = (atom6!=null?atom6.st:null);
                    }


                    }
                    break;
                case 4 :
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:239:4: ebnf
                    {
                    pushFollow(FOLLOW_ebnf_in_elementNoOptionSpec1234);
                    ebnf7=ebnf();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 241:5: -> {$ebnf.st}
                    {
                        retval.st = (ebnf7!=null?ebnf7.st:null);
                    }


                    }
                    break;
                case 5 :
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:243:6: ACTION
                    {
                    match(input,ACTION,FOLLOW_ACTION_in_elementNoOptionSpec1251); 


                    // TEMPLATE REWRITE
                    // 245:5: -> {%{\"epsilon\"}}
                    {
                        retval.st = new StringTemplate(templateLib,"epsilon");
                    }


                    }
                    break;
                case 6 :
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:247:6: SEMPRED
                    {
                    match(input,SEMPRED,FOLLOW_SEMPRED_in_elementNoOptionSpec1268); 


                    // TEMPLATE REWRITE
                    // 249:5: -> {%{\"[>SEMPRED<]\"}}
                    {
                        retval.st = new StringTemplate(templateLib,"[>SEMPRED<]");
                    }


                    }
                    break;
                case 7 :
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:251:4: GATED_SEMPRED
                    {
                    match(input,GATED_SEMPRED,FOLLOW_GATED_SEMPRED_in_elementNoOptionSpec1283); 


                    // TEMPLATE REWRITE
                    // 253:5: -> {%{\"[>GATED_SEMPRED<]\"}}
                    {
                        retval.st = new StringTemplate(templateLib,"[>GATED_SEMPRED<]");
                    }


                    }
                    break;
                case 8 :
                    // back-end/koopa/trees/antlr/filter/generator/ANTLRv3TreeFilter.g:255:6: treeSpec
                    {
                    pushFollow(FOLLOW_treeSpec_in_elementNoOptionSpec1300);
                    treeSpec8=treeSpec();

                    state._fsp--;



                    // TEMPLATE REWRITE
                    // 257:5: -> {$treeSpec.st}
                    {
                        retval.st = (treeSpec8!=null?treeSpec8.st:null);
                    }


                    }
                    break;

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