O compilador tem como função traduzir um programa de linguagem fonte (alto nível) para uma linguagem de máquina (baixo nível). Porém nesta tradução existem estágios intermediários até chegar em linguagem de máquina para ser executada pelo processador. Esses estágios são:
1º) Edição: É o estágio onde o programador constrói sua linguagem (fonte) de alto nível em um editor qualquer e salva em uma terminação padrão da linguagem adotada. Ex em c++:.cpp;.C; etc.
2º) Pré-Processador: Antes de compilar o código fonte, este passa por um pré-processador que obedece à comandos chamados de diretivas de pré-processador (que em c++ são iniciados por #), que indicam que certas manipulações devem ser feitas antes da compilação. Exemplo em c++:
#define area_quadrado(x) (x*x)
Então o comando:
area = area_quadrado(2);
Vai ser traduzido para:
area = (2*2);
Daí então passa para fase de compilação.
3º) Compilação: Nesta fase o programa fonte já pré-processado é transformado em um arquivo objeto (.o) que já contém todo programa em binário. Neste processo, no caso c++, antes de passar para o “.o” é traduzido para código assembly para depois, utilizando um montador, ser passado para programa objeto (.o).
4º) Linkagem: O código objeto não é executado diretamente depois de traduzido, visto que em um programa pode-se ocorrer referências a outros programas ou dados, os quais se encontram em outros programas, ou em bibliotecas. Então nesta etapa um editor (linkeditor) tem como função juntar esses códigos traduzidos separadamente em um único módulo que seria um programa executável. Portanto se um programa for traduzido e linkado corretamente será gerado um executável.
5º) Carregamento: Antes que um programa possa ser executado, ele deve ser armazenado na memória principal. Portanto esta fase tem como função colocar o programa em memória principal.
6º) CPU: Por fim, o computador, sob controle da CPU executa uma instrução por vez.
