A tabela abaixo é baseada na tabela de precedência disponível aqui.
Nessa tabela, os operadores estão em ordem decrescente de prioridade: na primeira linha os operadores executados em primeiro lugar e na última os operadores executados por último. Assim, o operador = possui a menor precedência dentre os operadores da tabela. A coluna direta indica a convenção de associação para os operadores da linha.
operadores | regra de associação |
---|---|
( ) | esquerda-para-direita |
! ^ | direira-para-esquerda |
* / % | esquerda-para-direita |
+ - | esquerda-para-direita |
= | direita-para-esquerda |
A tabela abaixo exemplifica a precedência dos operadores. Note, por exemplo, a associatividade da esquerda para direita entre operadores como + e - ou * e / e a associatividade da direita para a esquerda dos operadores !, ^ e =.
expressão | interpretação |
---|---|
2 + 3 + 4 | (2 + 3) + 4 |
2 ^ 3 ^ 4 | 2 ^ (3 ^ 4) |
A * B / C | (A * B) / C |
A = B + C / 3.2 / C | A = (B + ((C / 3.2) / C)) |
A = B = C = 3.2 | A = (B = (C = 3.2)) |
A * _ B ^ C - 2 | ((A * (! (B ** C)) - 2) |
O dicionário PREC que está no módulo reflete a precedência dos operadores e pode ser útil para implementar a função infixa_para_posfixa():
# trecho de código copiado do módulo operadores.py
# dicionário com a precedência de cada operador
PREC = {
# 7 operadores aritmético
EXPONENCIACAO: 5, # da DIREITA para a ESQUERDA
MENOS_UNARIO: 5, # da DIREITA para a ESQUERDA
RESTO_DIVISAO: 3, # da ESQUERDA para a DIREITA
MULTIPLICACAO: 3, # da ESQUERDA para a DIREITA
DIVISAO: 3, # da ESQUERDA para a DIREITA
ADICAO: 2, # da ESQUERDA para a DIREITA
SUBTRACAO: 2, # da ESQUERDA para a DIREITA
# atribuicao
ATRIBUICAO: 1, # da DIREITA para a ESQUERDA
ABRE_PARENTESES: 0 # conveniente
}