# Compiladores
> [!NOTE] Compiladores
> Um compilador é um programa de computador que traduz código escrito em uma linguagem de programação (a linguagem fonte) para outra linguagem de programação (a linguagem alvo). Geralmente, a linguagem alvo é uma linguagem de baixo nível, como linguagem de máquina ou linguagem Assembly, que pode ser executada diretamente pelo processador do computador.
>
> **Função Principal:**
> O principal objetivo de um compilador é permitir que os programadores escrevam código em linguagens de alto nível, que são mais fáceis de entender e escrever, e depois traduzir esse código para uma forma que o computador possa executar.
>
> **Processo de Compilação (Simplificado):**
> 1. **Análise Léxica:** O código fonte é lido e dividido em "tokens" (unidades básicas como palavras-chave, identificadores, operadores).
> 2. **Análise Sintática:** Os tokens são organizados em uma estrutura hierárquica (árvore de sintaxe abstrata) para verificar se a estrutura do código segue as regras gramaticais da linguagem fonte.
> 3. **Análise Semântica:** O compilador verifica o significado do código, como tipos de dados e declarações de variáveis, para garantir que ele faça sentido logicamente.
> 4. **Geração de Código Intermediário:** Uma representação intermediária do código é criada, que é independente da máquina alvo.
> 5. **Otimização de Código:** O código intermediário é otimizado para melhorar a eficiência (velocidade de execução, uso de memória).
> 6. **Geração de Código Alvo:** O código otimizado é traduzido para a linguagem de máquina ou Assembly da arquitetura específica.
>
> **Diferença para Interpretadores:**
> Ao contrário dos compiladores, que traduzem todo o código fonte de uma vez antes da execução, os interpretadores traduzem e executam o código linha por linha. Linguagens como Python e JavaScript são frequentemente interpretadas, enquanto C++ e Java são tipicamente compiladas (embora Java use um modelo híbrido com bytecode).
**:: Referência ::** [[Vozes da minha cabeça]]
# Notas