Um compilador é um programa que traduz o código-fonte em código-objeto para ser compreendido por uma unidade de processamento central (CPU) específica. O ato de traduzir o código-fonte em código-objeto é conhecido como compilação. A compilação é normalmente usada para programas que traduzem o código-fonte de uma linguagem de programação de alto nível (como C ++) para uma linguagem de programação de baixo nível (como código de máquina) para criar um programa executável. Da mesma forma, quando uma linguagem de baixo nível é convertida em uma linguagem de alto nível, o processo é chamado de descompilação.
Fases de um compilador
Um compilador executa seus processos em fases para promover um design eficiente e transformações corretas da entrada de origem para a saída de destino. As fases são as seguintes:
1. Analisador Lexical
Também é chamado de scanner. O compilador converte a sequência de caracteres que aparecem no código-fonte em uma série de caracteres de string conhecidos como tokens. Esses tokens são definidos por expressões regulares que são compreendidas pelo analisador lexical. Ele também remove erros lexicais, comentários e espaços em branco.
2. Analisador de sintaxe
O analisador de sintaxe constrói a árvore de análise, que é construída para verificar a ambigüidade na gramática fornecida. O analisador de sintaxe pega todos os tokens um por um e usa a Gramática Livre de Contexto para construir a árvore de análise. O erro de sintaxe pode ser detectado se a entrada não estiver de acordo com a gramática.
3. Analisador Semântico
O analisador semântico verifica a árvore de análise construída pelo analisador de sintaxe. Ele também faz a verificação de tipo, verificação de rótulo e verificação de controle de fluxo.
4. Gerador de código intermediário
O gerador de código intermediário gera código intermediário para execução por uma máquina. O código intermediário é convertido em linguagem de máquina usando as duas últimas fases, que dependem da plataforma.
5. Otimizador de código
O otimizador de código transforma o código para que consuma menos recursos e produza mais velocidade. O significado do código que está sendo transformado não é alterado.
6. Gerador de código de destino
Esta é a etapa final do estágio final de compilação. O gerador de código de destino escreve o código que uma máquina pode entender e também registra alocação, instrução e seleção. A saída depende do tipo de montador. O código otimizado é então convertido em código de máquina, formando a entrada para o linker e o carregador.
Tipos de compiladores
Existem muitos tipos de compiladores, como:
- Compilador cruzado: O programa compilado é executado em um computador que possui um sistema operacional ou CPU diferente daquele em que o compilador é executado. É capaz de criar código para uma plataforma diferente daquela em que o compilador está sendo executado
- Compilador fonte a fonte: Também conhecido como transcompilador, ele traduz o código-fonte escrito em uma linguagem de programação para o código-fonte de outra linguagem de programação.
- Compilador Just-in-time (JIT): Um compilador que adia a compilação até o tempo de execução. Este compilador é usado para linguagens como Python e JavaScript e geralmente é executado dentro de um interpretador.