As expressões são os blocos fundamentais de lógica em qualquer linguagem de programação.
Elas representam valores computáveis, que podem ser atribuídos, comparados, manipulados ou avaliados.
Nesta linguagem, a estrutura de uma expressão segue uma hierarquia clara, onde cada nível define o tipo de operação permitida e sua precedência.

Hierarquia das expressões

  • expressionassignment
    Toda expressão começa com uma atribuição, que pode ser simples (=) ou composta (+=, -=, etc.).
  • assignmentternary
    Permite atribuir valores com base em uma condição ternária: condição ? valor1 : valor2.
  • ternarylogical_or
    Avalia expressões com o operador lógico OU (ou).
  • logical_orlogical_and
    Avalia expressões com o operador lógico E (e).
  • logical_andequality
    Compara valores com operadores de igualdade (==) e diferença (!=).
  • equalitycomparison
    Realiza comparações relacionais: maior, menor, maior ou igual, etc.
  • comparisonterm
    Executa operações de soma e subtração.
  • termfactor
    Executa operações de multiplicação, divisão e módulo.
  • factorunary
    Aplica operadores unários como negação (!), negativo (-), tipo (tipode), incremento (++) e decremento (--).
  • unarypostfix
    Permite operações pós-expressão, como i++.
  • postfixcall
    Executa chamadas de função ou acesso a membros (objeto.metodo()).
  • callprimary
    Representa os elementos mais básicos: literais, identificadores ou expressões entre parênteses.
Essa hierarquia garante que expressões sejam avaliadas corretamente, respeitando a ordem de precedência dos operadores.