I'm trying to add trigonometric operations and agoupation symbols such as parenteses and keys to my context free grammar, but I'm not sure the way I should do it.
Here's what I have:
$$\begin{align}<expr> \to &\;<expr><op><expr>\\&|\;(<expr>)\\&|\;-<expr>\\&|\; num\\ <op> \to &\;+\\&|\;* \end{align}$$
I would really appreciate any hint or help and thank you for taking the time to read my question
Your grammar already handles parentheses correctly, because it includes $<expr>\;\to\;(<expr>)$.
I assume when you say (in a comment) that "by keys I mean brackets", then I suppose that what you really mean is that you want to include a notation for array subscripting such as $ar[k]$. However, you don't currently have any syntax which accepts variables, much less names of arrays.
There are two popular ways of expressing array subscripting. In my opinion, the better one is the syntax
$$<expr>\;\to\;<expr>[<expr>]$$
Some people prefer to use
$$<expr>\;\to\;<id>[<expr>]$$
because they don't believe that an array can be the result of an expression. (Or, if it is, that the expression can be subscripted.) But most programming languages do allow array expressions, and therefore use the first example.
In your language, apparently, trigonometric functions are prefix operators, like $-$, so that $\sin x$ is a valid expression. So that can be implemented simply by handling $\sin$ in the same way as $-$:
$$<expr>\;\to\;<trig><expr>$$
(where $<trig>$ would derive any one of the possible trigonometric operators you want to implement). It's not necessary to add a production to recognise $\sin(x)$ because $(x)$ is already recognised as an $<expr>$.
You should be aware that your grammar is too ambiguous to use for practical parsing. The different possible parses for each expression reflect different operator precedence and associativity. But the grammar will work if all you want to do is recognise whether an expression is syntactically correct.