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

        SymbolraetselASTSolver.number_return n1 = null;

        SymbolraetselASTSolver.number_return n2 = null;

        SymbolraetselASTSolver.number_return n3 = null;


        try {
            // C:\\Users\\Florian\\Dropbox\\Git\\CI_WiSe2013-2014\\CI_Aufgabe4\\src\\symbolraetsel_AST_Solver\\grammar\\SymbolraetselASTSolver.g:38:3: ( ^( EQUALS ^( ADDITION n1= number n2= number ) n3= number ) -> sum(number1=$n1.numbernumber2=$n2.numbernumber3=$n3.number))
            // C:\\Users\\Florian\\Dropbox\\Git\\CI_WiSe2013-2014\\CI_Aufgabe4\\src\\symbolraetsel_AST_Solver\\grammar\\SymbolraetselASTSolver.g:39:2: ^( EQUALS ^( ADDITION n1= number n2= number ) n3= number )
            {
            match(input,EQUALS,FOLLOW_EQUALS_in_constraint107); 

            match(input, Token.DOWN, null); 
            match(input,ADDITION,FOLLOW_ADDITION_in_constraint110); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_number_in_constraint114);
            n1=number();

            state._fsp--;

            pushFollow(FOLLOW_number_in_constraint118);
            n2=number();

            state._fsp--;


            match(input, Token.UP, null); 
            pushFollow(FOLLOW_number_in_constraint123);
            n3=number();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 40:2: -> sum(number1=$n1.numbernumber2=$n2.numbernumber3=$n3.number)
            {
                retval.st = templateLib.getInstanceOf("sum",
              new STAttrMap().put("number1", (n1!=null?n1.number:null)).put("number2", (n2!=null?n2.number:null)).put("number3", (n3!=null?n3.number:null)));
            }


            }


            Constraint constraint = new Constraint();
            constraint.numbers.add((n1!=null?n1.number:null));
            constraint.numbers.add((n2!=null?n2.number:null));
            constraint.numbers.add((n3!=null?n3.number:null));
            constraint.prepare();

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