Precedência entre operadores

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
}

This Page