public final SymbolraetselASTSolver.start_return start() throws RecognitionException {
        SymbolraetselASTSolver.start_return retval = new SymbolraetselASTSolver.start_return();
        retval.start = input.LT(1);

        List list_constraints=null;
        RuleReturnScope constraints = null;
        try {
            // C:\\Users\\Florian\\Dropbox\\Git\\CI_WiSe2013-2014\\CI_Aufgabe4\\src\\symbolraetsel_AST_Solver\\grammar\\SymbolraetselASTSolver.g:27:7: ( ^( START (constraints+= constraint )* ) -> sums(symbols=symbolscons=$constraints))
            // C:\\Users\\Florian\\Dropbox\\Git\\CI_WiSe2013-2014\\CI_Aufgabe4\\src\\symbolraetsel_AST_Solver\\grammar\\SymbolraetselASTSolver.g:28:2: ^( START (constraints+= constraint )* )
            {
            match(input,START,FOLLOW_START_in_start71); 

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); 
                // C:\\Users\\Florian\\Dropbox\\Git\\CI_WiSe2013-2014\\CI_Aufgabe4\\src\\symbolraetsel_AST_Solver\\grammar\\SymbolraetselASTSolver.g:28:21: (constraints+= constraint )*
                loop1:
                do {
                    int alt1=2;
                    int LA1_0 = input.LA(1);

                    if ( (LA1_0==EQUALS) ) {
                        alt1=1;
                    }


                    switch (alt1) {
                	case 1 :
                	    // C:\\Users\\Florian\\Dropbox\\Git\\CI_WiSe2013-2014\\CI_Aufgabe4\\src\\symbolraetsel_AST_Solver\\grammar\\SymbolraetselASTSolver.g:28:21: constraints+= constraint
                	    {
                	    pushFollow(FOLLOW_constraint_in_start75);
                	    constraints=constraint();

                	    state._fsp--;

                	    if (list_constraints==null) list_constraints=new ArrayList();
                	    list_constraints.add(constraints.getTemplate());


                	    }
                	    break;

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


                match(input, Token.UP, null); 
            }


            // TEMPLATE REWRITE
            // 29:2: -> sums(symbols=symbolscons=$constraints)
            {
                retval.st = templateLib.getInstanceOf("sums",
              new STAttrMap().put("symbols", symbols).put("cons", list_constraints));
            }


            }

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