TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Tradutores e compiladores

Tese: Tradutores e compiladores. Pesquise 859.000+ trabalhos acadêmicos

Por:   •  5/4/2014  •  Tese  •  1.315 Palavras (6 Páginas)  •  1.069 Visualizações

Página 1 de 6

1.1 Tradutores e Compiladores

Um Tradutor é um programa que recebe como dado de entrada um programa escrito em uma linguagem de programação (a linguagem fonte) e produz como saída de seu processamento um programa escrito em outra linguagem (a linguagem objeto).

Se a linguagem fonte é uma linguagem de alto nível como Fortran, Pascal, C ou Java, e a linguagem objeto é uma linguagem de baixo nível como a linguagem de montagem ("assembly") ou de máquina, o tradutor é chamado de Compilador.

Por esse enfoque, a execução de um programa escrito em linguagem de programação de alto nível é basicamente um processo de dois passos, como mostrado na Figura 1.1. O programa fonte deve primeiro ser compilado, isto é, traduzido para a linguagem objeto, para, em seguida, ser carregado na memória e executado.

O nome Compilador, criado nos anos 50, faz referência ao processo de composição de um programa pela reunião de várias rotinas de biblioteca; o processo de tradução (de uma linguagem fonte para uma linguagem objeto), considerado hoje a função central de um compilador, era então conhecido como Programação Automática.

Nesse processo de tradução, há duas tarefas básicas a serem executadas por um compilador:

• Análise, em que o texto de entrada (na linguagem fonte) é examinado, verificado e compreendido;

• Síntese, ou geração de código, em que o texto de saída (na linguagem objeto) é gerado, de forma a corresponder ao texto de entrada.

Normalmente, pensamos nessas tarefas como fases do processo de compilação, mas não é absolutamente necessário que a análise de todo o programa seja completada antes que o primeiro trecho de código objeto seja gerado: essas duas fases podem ser intercaladas. Como exemplos, um compilador pode analisar cada comando do programa de entrada, e gerar imediatamente o código de saída correspondente a esse comando; alternativamente, o compilador pode esperar o fim da análise de cada unidade de programa (rotina, procedimento, função, etc.) para então gerar o código correspondente à unidade.

Para melhor aproveitamento de memória durante sua execução, compiladores mais antigos costumavam ser divididos em vários passos, executados em seqüência, freqüentemente de forma aparente para o usuário.

Cada passo executa parte do processo de tradução, transformando o código fonte em alguma forma intermediária adequada, cada vez mais próxima do código objeto final.

1.2 Outros Tradutores

a) Interpretadores

Certos tipos de tradutores transformam uma linguagem de programação (LP) em uma linguagem simplificada, chamada de código intermediário, que pode ser diretamente “executado” por um programa chamado interpretador. Nós podemos imaginar o código intermediário como uma linguagem de máquina de um computador abstrato projetado para executar o código fonte. Por exemplo, Basic, Prolog e Java, são freqüentemente interpretadas.

Interpretadores são, em geral, menores que compiladores e facilitam a implementação de construções complexas em LPs. Entretanto, o tempo de execução de um programa interpretado é geralmente maior que o tempo de execução desse mesmo programa compilado.

b) Montadores ("Assemblers")

Montadores traduzem programas escritos em linguagem de montagem nos correspondentes programas escritos linguagem de máquina (0s e 1s).

c) Pré-processadores

Pré-processadores traduzem programas escritos em linguagens de alto nível em outros programas escritos também em linguagens de alto nível (p.ex. o pré-processador da linguagem C).

d) Macroprocessadores

Macroprocessadores, semelhantes aos pré-processadores, traduzem programas escritos em linguagens de alto nível em outros programas também escritos em linguagens de alto nível, tendo também a capacidade de processamento de macro-instruções.

Uma macro-instrução é um nome simbólico associado à um conjunto de instruções de uma LP que pode ser usado como referência a esse conjunto de instruções dentro do programa. Uma macro-instrução pode ou não ter parâmetros. Veja um exemplo de uso na Figura 1.2 a seguir.

1.3 Estrutura de um Compilador

Como dissemos anteriormente, um compilador recebe como entrada um programa fonte e produz como saída um programa objeto na forma de um conjunto de instruções em linguagem de máquina (ou, mais comum hoje em dia, em linguagem de montagem).

Esse processo é tão complexo que não é razoável, do ponto de vista lógico e de implementação, considerá-lo como sendo desenvolvido em um único passo. Por essa razão, é costume partir o processo de compilação em uma série de sub-processos, denominados fases, como podemos ver na Figura 1.3.

Uma fase é uma operação que toma como entrada uma representação do programa fonte e produz como saída uma outra representação.

Na primeira fase, um módulo chamado Analisador Léxico (scanner), lê o programa fonte caracter a caracter, agrupando a seqüência de caracteres lidos em grupos de símbolos (tokens). Os símbolos são as palavras-chaves tais como BEGIN e THEN, nomes (identificadores) de variáveis e procedimentos tais como X e SOMA, operadores tais como + e <=,

...

Baixar como (para membros premium)  txt (9 Kb)  
Continuar por mais 5 páginas »
Disponível apenas no TrabalhosGratuitos.com