Execução de programas
Um programa de computador não é escrito em uma linguagem que a máquina entende, por isso é necessário haver uma tradução do programa para a linguagem binária.
Compilação
Traduz um programa escrito em linguagem de alto nível para linguagem binária.
Exemplo:
int main (){
int Parcela1, Parcela2, Contador;
Parcela1=1;
Parcela2=2;
Contador=5;
for (i=Contador; i>0;i--)
Parcela2=Parcela1+Parcela2;
printf ("Parcela2 = %d\n",Parcela2);
exit(0);
}
Compilador executa três funções:
- Análise léxica: decompõe o programa fonte em seus elementos individuais distintos (comandos, operadores, variáveis) e verifica se estão de acordo com as regras da linguagem
- Análise sintática: cria as estruturas para os comandos e verifica a correção das estruturas (por exemplo,
tem int antes de main, tem abre e fecha parênteses)
- Análise semântica: verifica as regras semânticas estáticas da linguagem (por exemplo, estar atribuindo
valores do tipo correto para uma variável, Parcela1=1.5, poderia dar erro pois variável Parcela1 é do tipo int)
Montagem
Tradução de um programa em linguagem de montagem (código fonte) para
linguagem binária (código objeto).
Funções básicas:
- Substituir códigos de operações simbólicos por valores numéricos
- Substituir nomes simbólicos de endereços por valores numéricos
- Reservar espaço de memória para armazenamento de instruções e dados
- Converter valores de constantes para binários
- Examinar a correção de cada instrução
Exemplo:
lw 0 1 Parcela1
lw 0 2 Contador
add 2 0 3
inicio beq 3 0 fim
lw 0 4 Parcela2
add 1 4 4
sw 0 4 Parcela2
addi 3 3 -1
beq 3 3 inicio
call printf
fim halt
Parcela1 .fill 1
Parcela2 .fill 2
Contador .fill 5
Ligação ou link-edição
Algumas rotinas já existem codificadas no sistema, por exemplo, rotinas para entrada e saída de dados, de modo que o programador não precisa codificá-las.
Exemplo: printf(), readln(), rotinas matemáticas como seno e coseno.
Estas rotinas são armazenadas em bibliotecas que são incluídas no código objeto gerado pelo compilador.
Exemplo: No código C acima foi utilizada a rotina printf que é externa. O compilador traduziu por "call printf".
Para que o código da subrotina externa seja anexado ao código objeto utiliza-se o processo de ligação.
Este processo examina todo o código objeto e procura por referências externas não resolvidas assinaladas pelo compilador.
Ele procura pela rotina no sistema e se a encontra, inclui seu código no código objeto, caso contrário, gera uma mensagem de erro.
Interpretação
Realiza as três fases (compilação, ligação e execução) comando a comando do programa fonte. Um programa fonte é executado pelo programa interpretador.
Compilação X Interpretação
- Erros são detectados de forma mais fácil na interpretação
- Utiliza-se mais memória na interpretação porque interpretador tem que estar na memória
- Na interpretação, loop tem que ser traduzido em todas as iterações
- Programas muito utilizados são traduzidos toda vez que são executados na interpretação