|

Normalmente, o código fonte é escrito em uma linguagem de programação de alto nível, com grande capacidade de abstração, e o código objeto é escrito em uma
linguagem de baixo nível, como uma sequência de instruções a ser executada pelo microprocessador.
O processo de compilação é composto de análise e síntese.
A análise tem como objetivo entender o código fonte e representá-lo em uma estrutura intermediária.
A síntese constrói o código objecto a partir desta representação intermediária.
A análise pode ser subdividida ainda em análise léxica, análise sintática, análise semântica e geração de código intermediário.
É também conhecida como front end.
A síntese pode ter mais variações de um compilador a outro, podendo ser composta pelas etapas de optimização de código e geração de código final (ou código de
máquina), sendo somente esta última etapa é obrigatória.
É também conhecida como back end.
Em linguagens híbridas, o compilador tem o papel de converter o código fonte em um código chamado de byte code, que é uma linguagem de baixo nível.
Um exemplo deste comportamento é o do compilador da linguagem Java que, em vez de gerar código da máquina hospedeira (onde se está executando o compilador), gera
código chamado Java Bytecode.
Um compilador é chamado de Just-in-time compiler (JIT) quando seu processo de compilação acontece apenas quando o código é chamado.
Um JIT pode fazer otimizações às instruções a medida que as compila.
Muitos compiladores incluem um pré-processador.
Que é um programa separado, ativado pelo compilador antes do início do processo de tradução.
Normalmente é responsável por mudanças no código fonte destinadas de acordo com decisões tomadas em tempo de compilação.
Por exemplo, um programa em C permite instruções condicionais para o pré-processador que podem incluir ou não parte do código caso uma assertiva lógica seja
verdadeira ou falsa, ou simplesmente um termo esteja definido ou não.
Tecnicamente, pré-processadores são muito mais simples que compiladores e são vistos, pelos desenvolvedores, como programas à parte, apesar dessa visão não ser
necessariamente compartilhada pelo usuário.
Outra parte separada do compilador que muitos usuários vêem como integrada é o linker, cuja função é unir vários programas já compilados de uma forma independente
e unificá-los em um programa executável.
Isso inclui colocar o programa final em um formato compatível com as necessidades do sistema operacional para carregá-lo em memória e colocá-lo em execução.
© Copyright Wikipédia, a enciclopédia livre
|