Reduce-reduce means that it has reached a state that, in front of a language symbol, it can reduce two different rules, leading to two different syntax trees representing your sentence. As the next symbol is valid in both scenarios, and being a one symbol ahead parser, this means that your grammar is ambiguous, and you need to provide more information (like precedence rules, or similar) in order to make the parser to take one reduction or the other.
You can receive this error from a yacc type grammar compiler, or a shift-reduce which means, again, ambiguity in your grammar. While there's no solution but changing the way your grammar is defined, or to switch to a grammar based on operator precedence to solve this problems, in both cases we are looking at some kind of ambiguity that leads to two different syntax trees describibin your language sentence.
In your case, the rule
expression : expression OPER expression
Is full of ambiguities, as you cannot guess if:
3 + 5 + 8
will result in a parse tree:
/--- <3> expression : CONSTANT
<+> expression : expression OPER expression
\ /--- <5> expression : CONSTANT
\--- <+> expression : expression OPER
\--- <8> expression : CONSTANT
or
/--- <3> expression : CONSTANT
/--- <+> expression : expression OPER expression
/ \--- <5> expression : CONSTANT
<+> expression : expression OPER expression
\--- <8> expression : CONSTANT
the first indicating that the expression is parsed as (in full parenthesized notation) (3 + (5 + 8)), and the second meaning your parser has interpreted ((3 + 5) + 8).