public final JPoclASTParser.expr1_return expr1() throws RecognitionException {
        JPoclASTParser.expr1_return retval = new JPoclASTParser.expr1_return();
        retval.start = input.LT(1);


        TypeTree root_0 = null;

        Token set82=null;
        JPoclASTParser.expr2_return expr281 =null;

        JPoclASTParser.expr2_return expr283 =null;


        TypeTree set82_tree=null;

        try {
            // C:\\Users\\pc\\Desktop\\IPL\\ew\\JPocl\\JPoclAST.g:105:8: ( expr2 ( ( '*' | '/' | '%' ) ^ expr2 )* )
            // C:\\Users\\pc\\Desktop\\IPL\\ew\\JPocl\\JPoclAST.g:105:10: expr2 ( ( '*' | '/' | '%' ) ^ expr2 )*
            {
            root_0 = (TypeTree)adaptor.nil();


            pushFollow(FOLLOW_expr2_in_expr1833);
            expr281=expr2();

            state._fsp--;

            adaptor.addChild(root_0, expr281.getTree());

            // C:\\Users\\pc\\Desktop\\IPL\\ew\\JPocl\\JPoclAST.g:105:16: ( ( '*' | '/' | '%' ) ^ expr2 )*
            loop17:
            do {
                int alt17=2;
                int LA17_0 = input.LA(1);

                if ( (LA17_0==22||LA17_0==26||LA17_0==30) ) {
                    alt17=1;
                }


                switch (alt17) {
            	case 1 :
            	    // C:\\Users\\pc\\Desktop\\IPL\\ew\\JPocl\\JPoclAST.g:105:18: ( '*' | '/' | '%' ) ^ expr2
            	    {
            	    set82=(Token)input.LT(1);

            	    set82=(Token)input.LT(1);

            	    if ( input.LA(1)==22||input.LA(1)==26||input.LA(1)==30 ) {
            	        input.consume();
            	        root_0 = (TypeTree)adaptor.becomeRoot(
            	        (TypeTree)adaptor.create(set82)
            	        , root_0);
            	        state.errorRecovery=false;
            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }


            	    pushFollow(FOLLOW_expr2_in_expr1849);
            	    expr283=expr2();

            	    state._fsp--;

            	    adaptor.addChild(root_0, expr283.getTree());

            	    }
            	    break;

            	default :
            	    break loop17;
                }
            } while (true);


            }

            retval.stop = input.LT(-1);


            retval.tree = (TypeTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }

        catch (RecognitionException re) {
        	reportError(re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }