O formato de três endereços é um tipo de representação intermediária de código usada nos compiladores. É chamado de "adulto de três" porque cada instrução normalmente envolve no máximo três operandos (variáveis ou constantes). A forma geral de uma instrução de três endereço é:
`x =y op z`
Onde:
* `x`,` y` e `z` são operando (variáveis ou constantes).
* `op` é um operador binário (por exemplo, +, -, *, /, =).
Características -chave: *
operando explícitos: Operandos são nomeados explicitamente; Não há uso implícito de registros ou locais de pilha, como você pode encontrar no idioma da montagem. Isso facilita os passes de otimização do compilador para analisar e manipular o código.
*
Um operador por instrução: Cada instrução executa apenas uma operação. Isso contrasta com os idiomas de montagem, onde uma única instrução pode executar várias operações.
*
Variáveis temporárias: Freqüentemente, variáveis temporárias são usadas para realizar resultados intermediários. Isso ajuda a tornar o código mais claro e mais fácil de otimizar.
*
Estrutura simples: A estrutura simples e regular simplifica o design e a otimização do compilador.
Exemplo: Vamos considerar a expressão aritmética:`a =b + c * d`.
Em uma representação de código de três adolescentes, ele pode ser traduzido para a seguinte sequência de instruções:
1. `T1 =c * d` (multiplique c e d, armazenar o resultado em variável temporária T1)
2. `T2 =B + T1` (Adicione B e T1, armazene o resultado em variável temporária T2)
3. `A =T2` (atribua o valor em T2 a A)
Vantagens: *
Otimização: A representação explícita dos operandos e o design de uma operação por instrução facilitam o compilador para executar várias otimizações, como eliminação comum da subexpressão, dobra constante e movimento de código.
*
Legibilidade e depuração: A estrutura clara torna o código intermediário mais legível e mais fácil de depurar em comparação com representações mais compactas e menos estruturadas.
Desvantagens: *
Código mais longo: Comparado a outras representações intermediárias, o código de três esforços pode resultar em sequências de código mais longas devido ao uso de variáveis temporárias. No entanto, esse comprimento geralmente é compensado pelo aumento das oportunidades de otimização.
Em resumo, o código de três endereços fornece uma representação intermediária poderosa e flexível que facilita a otimização e a geração de código eficaz do compilador. É uma parte crucial do processo de compilação para muitas linguagens de programação.