O Tradutor Universal
Um compilador não é mágica; é um programa que traduz código escrito em uma linguagem de alto nível (legível por humanos) para uma linguagem de baixo nível (linguagem de máquina ou assembly) que o processador pode executar.
Código Fonte
int a = 10 + 5;
Binário
0101 1100 0011
Compiladores vs. Interpretadores
-
🚀
Compilador (AOT): Traduz tudo de uma vez antes da execução. Ex: C, C++, Rust. Mais rápido na execução.
-
🐌
Interpretador: Traduz linha por linha durante a execução. Ex: Python, Ruby. Início rápido, execução mais lenta.
-
⚡
JIT (Just-In-Time): Híbrido. Compila partes "quentes" do código durante a execução. Ex: Java (JVM), JavaScript (V8).
O Pipeline de Compilação
Navegue pelas fases abaixo para ver como o código x = a + b * 2 é transformado. Este processo é dividido em Front-end (análise) e Back-end (síntese).
Análise Léxica
O "Scanner". Lê o fluxo de caracteres e agrupa em tokens significativos, removendo espaços e comentários. Se encontrar caracteres ilegais, lança um erro.
Trade-offs de Engenharia
Comparação entre tempo de compilação (espera do dev) e tempo de execução (espera do usuário) para diferentes paradigmas.
Complexidade de Análise (Parsing)
Como o computador entende a estrutura gramatical.
Top-Down (Descendente)
LL(1)Constrói a árvore da raiz para as folhas. Intuitivo, fácil de escrever à mão (Recursive Descent).
Bottom-Up (Ascendente)
LR(1) / LALRConstrói das folhas para a raiz (reduzindo tokens). Mais poderoso, usado por ferramentas como Yacc/Bison.
Tabela de Símbolos
A Arte da Otimização
O compilador reescreve seu código para torná-lo mais eficiente sem alterar o resultado. Experimente os filtros abaixo.