003a Texto de apoio
Um compilador (ou um conjunto de programas) que traduz um código fonte para uma linguagem de mais baixo nível (a linguagem alvo, que tem uma forma binária conhecida como código objeto). 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 processador.
O compilador é um dos dois tipos mais gerais de tradutores, juntamente com o interpretador.
Componentes de um compilador
A construção de um compilador é dividida em partes, cada uma com uma função especifica:
•
Analisador Léxico (AL): separa no programa fonte cada
símbolo que tenha algum significado para a linguagem ou avisa quando um símbolo que não faz parte da linguagem é encontrado.
•
Análise Sintática (AS): é o responsável por verificar se a
seqüência de símbolos existentes no programa fonte formam um programa válido ou não. É construído sobre uma gramática composta de uma série de regras que descrevem quais são as construções válidas da linguagem. •
Análise Semântica (ASE): irá verificar se os aspectos semânticos estão corretos, ou seja, se não existem incoerências quanto ao significado das construções utilizadas pelo programador. A ASE depende de uma tabela de símbolos onde são armazenadas as informações de variáveis declaradas, funções ou métodos, entre outros.
•
Geração e Otimização de Código (GC): após a verificação que não existem erros sintáticos ou semânticos, o compilador realiza a sua tarefa de criar o programa objeto que reflete, mediante instruções de baixo nível, os comandos do programa fonte.
Também pode fazer a otimização do código, onde são aplicadas diversas técnicas para otimizar algumas características do programa objeto, como o seu tamanho ou sua velocidade.
O processo de compilação
O processo de compilação é composto de análise e síntese.
A análise tem como objetivos entender o