Os operadores foram divididos conforme sua precedência, isto é,
precedência de op_prec_5 > op_prec_4 > ... > op_prec_1 > op_prec_0.
Estão inclusas algumas operações usuais:
op_prec_0 : OR
op_prec_1 : AND
op_prec_2 : MENOR_QUE
| MENOR_OU_IGUAL
| MAIOR_QUE
| MAIOR_OU_IGUAL
| IGUAL
| NAO_IGUAL
op_prec_3 : MAIS
| MENOS
op_prec_4 : VEZES
| DIVISAO
op_prec_5 : NOT
| MENOS
exp : exp op_prec_0 exp1
| exp1
exp1 : exp1 op_prec_1 exp2
| exp2
exp2 : exp2 op_prec_2 exp3
| exp3
exp3 : exp3 op_prec_3 exp4
| exp4
exp4 : exp4 op_prec_4 exp5
| exp5
exp5 : op_prec_5 exp5
| exp_f
exp_f : NUMERO
| VARIAVEL
| ABRE_PARENTESE exp FECHA_PARENTESE
| outra_coisa_qualquer
A última regra de
operadores foi usada para os operadores unários:
a negação lógica e o sinal "-" unário.
a negação lógica e o sinal "-" unário.
Eles em geral tem uma maior precedência
na maioria das linguagens.