So now let say the next spec introduce a new unary operator 'opx'
which has a higher precedence than all others unary operators.
how the following expression is evaluated ?
You mean how it is parsed! Associativity and precedence determine the parse.
Evaluation is semantics. In the design of a language, the semantics of
evaluation for a given syntax can be completely arbitrary, so that can be
discussed separately.
If opx has a higher precedence it means that the parse is, perhaps, like this:
(op1 ((opx op3) obj))
I.e. the argument to opx is the operator op3.
I say ``perhaps'' because we don't know the phrase structure role of the ``opx
op3'' combination. The above example parse assumes that the compound ``opx
op3'' behaves as a unary operator. That is, (opx op3) is a prefix that applies
to obj, and then op1 applies to the whole thing.
So effectively, you have the individual operators opx and op3, and then the
combination of these two tokens which make a third operator of some kind.
This kind of agglutination of operators is typically expressed in the lexical
syntax, not in the phrase structure grammar. E.g. += isn't treated as two
tokens (at least not today; I seem to vaguely recall that may have been the
case in some early C compilers).