COMPILADORES
Um compilador se refere a um programa de computador usado para traduzir um código de computador escrito em uma linguagem de programação (conhecida como linguagem de origem) em outra linguagem de programação (conhecida como linguagem de destino). O termo compilador é aplicado principalmente a programas que traduzem códigos-fonte de uma linguagem de programação de alto nível para uma linguagem de programação de nível inferior. Por exemplo, código de máquina, código objeto ou linguagem assembly para criar um programa executável.
É importante observar que existem muitos tipos diferentes de compiladores. Caso o programa compilado possa ser executado em um computador cujo sistema operacional ou CPU seja diferente daquele em que o compilador executa, o compilador é denominado compilador cruzado. Por outro lado, um compilador bootstrap é escrito na linguagem que pretende compilar. Um descompilador é um programa usado para traduzir uma linguagem de baixo nível para uma linguagem de nível superior. Um programa usado para traduzir entre linguagens de alto nível é conhecido como compilador fonte-a-fonte. Também pode ser chamado de transpilador. Um programa responsável por traduzir a forma das expressões sem alterar o idioma é conhecido como reescritor de linguagem. O termo compilador-compilador refere-se às ferramentas usadas para criar analisadores responsáveis por realizar a análise de sintaxe.
Algumas das operações executadas por um compilador incluem: pré-processamento, análise, (tradução direcionada à sintaxe), análise semântica, análise lexical, geração de código, otimização de código e conversão de programas de entrada em uma representação intermediária. Os compiladores são responsáveis por implementar essas operações em diferentes fases que promovem transformações corretas e design eficiente da entrada de origem para a saída de destino. Falhas de programa causadas por comportamento incorreto do compilador podem ser muito difíceis de rastrear e solucionar. Os implementadores de compiladores, portanto, investem esforços significativos para garantir a correção do compilador.
É importante observar que os compiladores não são os únicos tradutores usados para transformar programas fonte. Um software de computador responsável por transformar e executar as operações indicadas é denominado intérprete. O processo de tradução influencia o design das linguagens de computador, o que leva a uma preferência de interpretação ou compilação. Na prática, a implementação de um interpretador para compiladores e linguagens compiladas pode ser implementada para linguagens interpretadas.
Observe que ao usar um compilador, um processo de duas etapas é usado para executar um programa,
A CADEIA DE FERRAMENTAS DE COMPILAÇÃO
Para programas grandes, o compilador faz parte de uma cadeia de ferramentas de várias etapas,
(pré-processador)- (compilador)- (montador)- (vinculador)- (carregador).
ESTRUTURA DE UM COMPILADOR
Os compiladores modernos são compostos de duas partes principais. Cada uma dessas partes é frequentemente subdividida. Essas duas partes principais são o front-end e o back-end.
O front end é responsável por analisar o programa fonte, construir uma representação intermediária do programa e determinar suas partes constituintes. Geralmente, o front-end é independente do idioma de destino.
O back-end, por outro lado, é responsável por sintetizar o programa alvo a partir da representação intermediária produzida pelo front-end. Geralmente, diz-se que o back-end é independente do idioma de origem.