Associatividade é a ordem na qual os operadores são agrupados com os operandos. Quando dois operadores tem a mesma precedência, o interpretador usa aquela que vier primeiro nas regras de associatividade.
Há apenas uma regra de associatividade:
A cada operador está associada uma direção, e os operadores de um mesmo grupo têm a mesma direção. Se os operadores de uma expressão tiverem a mesma precedência, a expressão será avaliada na direção ditada pela associatividade dos operadores.
esquerda para a direita
direita para esquerda
Por exemplo, na expressão x * y / ( z * 3 ), a expressão (z*3) será avaliada em primeiro lugar pois os parênteses têm precedência mais alta. Os operadores de divisão e multiplicação têm a mesma precedência. Ambos os operadores associam-se da esquerda para a direita, portanto y é agrupado com o operador de multiplicação, e não com o operador de divisão. A quantidade x * y é avaliada e o resultado dividido por (z*3)
No interpretador Hall todos os operadores são avaliados da esquerda para a direita exceto o operador de atribuição.
Por exemplo na expressão:
R := valor[1] + valor[2] - desconto;
Nesse exemplo, primeiro são avaliados os os colchetes e o interpretador extrai os valores do vetor valor. Como os operadores + e - têm igual precedência, e são avaliados da esquerda para a direita, os dois valores[] são avaliados da esquerda para a direita, sendo somados, e da soma é subtraído o valor do desconto. O resultado é como se tivessem sido usados parênteses envolvendo a expressão de adição.
Por exemplo:
R := (valor[1] + valor[2]) - desconto;