O
que é : Tradução, Compilação e Interpretação.
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.
1) Montagem (Assembler = Montador)
Tradução de um programa em linguagem de montagem (código fonte) para
linguagem binária (código objeto).
O programa que faz a tradução é o montador (ou Assembler)
Funções básicas:
- Examinar a correção de cada instrução
- Substituir códigos de operações simbólicos por valores numéricos
- Substituir nomes simbólicos de endereços por valores numéricos
- Converter valores de constantes para binários
- Reservar espaço de memória para armazenamento de instruções e dados
2 ) Compilação
Traduz o programa-fonte escrito em linguagem de alto nível (linguagem
fonte) para o programa-objeto escrito, por exemplo, em linguagem de máquina (binária).
Pode-se gerar um programa intermediário no meio do processo escrito em
Assemply, por exemplo.
O tempo para realizar esta tarefa é chamado tempo de compilação. Em seguida executa o programa-objeto. O tempo
para realizar esta tarefa é chamado tempo
de execução.
O programa que faz a tradução é o compilador.
Compilador executa duas funções básicas: análise e síntese
Análise:
- Análise léxica: decompõe o
programa fonte em seus elementos individuais distintos e verifica se estão
de acordo com as regras da linguagem
(ex: associa strings de caracteres a comandos, operadores, variáveis,....)
Resultado: conjunto de tokens
- Análise sintática: cria as
estruturas para os comandos e verifica a correção das estruturas (ex: tem
int antes de main, tem abre e fecha parênteses)
Resultado: árvore sintática representando a estrutura do programa
- Análise semântica: verifica as regras semânticas estáticas da linguagem (ex: estar atribuindo valores do tipo correto para uma variável: Parcela1=1.5, poderia dar erro pois variável Parcela1é do tipo int)
Síntese: gera o programa-objeto
- Geração de código: gera o programa-objeto
- Otimização de código: tenta tornar o programa-objeto mais eficiente
Exemplo de linguagem compilada: C, Pascal
Montagem x Compilação:
Diferença está na complexidade. Na montagem existe
uma relação 1:1 entre o código na linguagem de montagem e o código na linguagem
de máquina. Já na compilação a relação é múltipla, cada instrução do código
fonte gera múltiplas instruções no código de máquina.
3) 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.
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.
4) Interpretação
A partir do código fonte realiza as três fases (compilação, ligação e
execução) comando a comando. Lê uma instrução, compila, liga e executa. Depois
lê a próxima instrução e faz os mesmos 3 passos.
O programa executa estas três fazes é o interpretador.
Exemplo de linguagem interpretada: Java
Compilação X Interpretação
Tempo de execução:
É maior no na interpretação pois cada vez que o programa é executado, o
interpretador executa as três fases. Já o compilador é só executar o
programa-objeto já gerado na primeira vez.
Consumo de memória:
O interpretador precisa permanecer na memória durante todo o tempo de
execução. Já o compilador fica na memória somente durante o tempo de
compilação. Quando o programa é executado, somente o programa-objeto fica na
memória.
Repetição da interpretação:
Sempre que um programa for utilizado, terá que ser interpretado
novamente. Isso é um problema para os programas que são muito utilizados.
No caso de loops, cada instrução
do loop é interpretada em todos os
passos do loop. No caso da compilação, a tradução para código-objeto ocorre só
uma vez pois o loop não e executado enquanto a tradução é feita.
Por tanto, o método de interpretação torna-se mais lento que o de compilação.
Detecção de erros:
No método de compilação, a identificação de erros durante a fase de
execução fica sempre difícil, pois não há mais relação entre comandos do código
fonte e instruções do executável.
No método de interpretação, cada comando é interpretado e executado individualmente, a relação entre código fonte e executável é mais direta e o efeito da execução (certa ou errada) é direta e imediatamente sentido.
Nenhum comentário:
Postar um comentário