Sunteți pe pagina 1din 5

COMPILADORES

1. INTRODUO
TRADUTORES E COMPILADORES Um tradutor um programa que recebe como dado de entrada um programa escrito em uma linguagem de programao (a linguagem fonte) e produz como sada de seu processamento um programa escrito em outra linguagem (a linguagem objeto). Se a linguagem fonte uma linguagem de alto nvel como Fortran, Pascal ou C, e a linguagem objeto uma linguagem de baixo nvel como a linguagem de montagem ("assembly") ou de mquina, o tradutor chamado de compilador. Por esse enfoque, a execuo de um programa escrito em linguagem de programao de alto nvel 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 memria e executado.

UFCG / DSC / PSN, 2005 Parte 1: Introduo

Pg. 1

COMPILADORES

Figura 1.1 - Compilao e Execuo de um programa

UFCG / DSC / PSN, 2005 Parte 1: Introduo

Pg. 2

COMPILADORES OUTROS TRADUTORES Interpretadores Certos tipos de tradutores transformam uma linguagem de programao (LP) em uma linguagem simplificada, chamada de cdigo intermedirio, que pode ser diretamente executado por um programa chamado interpretador. Ns podemos imaginar o cdigo intermedirio como uma linguagem de mquina de um computador abstrato projetado para executar o cdigo fonte. Por exemplo, Basic, Prolog e Java, so freqentemente interpretadas. Interpretadores so, em geral, menores que compiladores e facilitam a implementao de construes complexas em LPs. Entretanto, o tempo de execuo de um programa interpretado geralmente maior que o tempo de execuo desse mesmo programa compilado. Montadores ("Assemblers") Montadores traduzem programas escritos em linguagem de montagem nos correspondentes programas escritos linguagem de mquina (0s e 1s).

UFCG / DSC / PSN, 2005 Parte 1: Introduo

Pg. 3

COMPILADORES Pr-processadores Pr-processadores traduzem programas escritos em linguagens de alto nvel em outros programas escritos tambm em linguagens de alto nvel (p.ex. o pr-processador da linguagem C). Macroprocessadores Macroprocessadores, semelhantes aos pr-processadores, traduzem programas escritos em linguagens de alto nvel em outros programas tambm escritos em linguagens de alto nvel, tendo tambm a capacidade de processamento de macro-instrues. Uma macro-instruo um nome simblico associado um conjunto de instrues de uma LP que pode ser usado como referncia a esse conjunto de instrues dentro do programa. Uma macro-instruo pode ou no ter parmetros. Veja um exemplo de uso na figura 1.2. #define MIN( A, B ) . . . int x, y, z; . . . z = MIN( x, y ); Figura 1.2 - Exemplo de uso de macro-instruo
UFCG / DSC / PSN, 2005 Parte 1: Introduo Pg. 4

( (A) <= (B) ? (A) : (B) )

COMPILADORES ESTRUTURA DE UM COMPILADOR Como dissemos anteriormente, um compilador recebe como entrada um programa fonte e produz como sada um programa objeto na forma de um conjunto de instrues em linguagem de mquina (ou, mais comum hoje em dia, em linguagem de montagem). Esse processo to complexo que no razovel, do ponto de vista lgico e de implementao, consider-lo como sendo desenvolvido em um nico passo. Por essa razo, costume partir o processo de compilao em uma srie de subprocessos chamados fases, como podemos ver na figura 1.3. Uma fase uma operao que toma como entrada uma representao do programa fonte e produz como sada uma outra representao.

UFCG / DSC / PSN, 2005 Parte 1: Introduo

Pg. 5

COMPILADORES

Programa Fonte Analisador Lxico Analisador Sinttico e Semntico Tabela de Smbolos Gerador de Cdigo Intermedirio Otimizador de Cdigo Intermedirio Gerador de Cdigo Programa Objeto Manipulador de Erros

Figura 1.3 - Estrutura de um Compilador

UFCG / DSC / PSN, 2005 Parte 1: Introduo

Pg. 6

COMPILADORES Na primeira fase, um mdulo chamado analisador lxico (scanner), l o programa fonte caracter a caracter, agrupando a seqncia de caracteres lidos em grupos de smbolos (tokens). Os smbolos so as palavras-chaves tais como BEGIN e THEN, nomes (identificadores) de variveis e procedimentos tais como X e SOMA, operadores tais como + e <=, e smbolos de pontuao tais como parnteses e ponto-e-vrgula. A sada do analisador lxico uma seqncia de smbolos que passada para a prxima fase, o analisador sinttico. Os smbolos nessa seqncia so geralmente representados por cdigos (valores inteiros). O analisador sinttico (parser) agrupa os smbolos recebidos do analisador lxico em estruturas sintticas. Os trs smbolos representando A + B poderiam ser agrupados em uma estrutura sinttica chamada expresso. Expresses poderiam ser posteriormente agrupadas para formar comandos, e assim por diante. O analisador semntico verifica se estruturas sintticas pelo analisador sinttico, embora corretas sintaticamente, tm significado admissvel na linguagem. Por exemplo, A + B pode ser uma expresso sintaticamente correta, mas pode no ter significado em muitas linguagens se A for inteiro e B for caracter.

UFCG / DSC / PSN, 2005 Parte 1: Introduo

Pg. 7

COMPILADORES O gerador de cdigo intermedirio usa as estruturas produzidas pelo analisador sinttico e verificadas pelo analisador semntico para criar uma seqncia de instrues simples dita cdigo intermedirio (est entre a linguagem de alto nvel e a linguagem de baixo nvel). O otimizador de cdigo (independente de mquina) um mdulo opcional (presente na grande maioria dos compiladores) que objetiva melhorar o cdigo intermedirio de modo que o programa objeto produzido ao fim da compilao seja menor (ocupe menos espao de memria) e/ou mais rpido (tenha tempo de execuo menor). A sada do otimizador de cdigo um novo cdigo intermedirio. O gerador de cdigo produz o cdigo objeto final, tomando decises com relao alocao de espao para os dados do programa, selecionando a forma de acess-los, definindo que registradores da UCP sero usados, etc. Projetar um gerador de cdigo que produza programas objeto verdadeiramente eficientes uma das tarefas mais difceis no projeto de um compilador. A maioria dos compiladores atuais tem, como parte integrante de seu gerador de cdigo, um mdulo adicional de otimizao de cdigo dependente de mquina que tem por objetivo melhorar o cdigo de mquina produzido para melhor aproveitar os recursos especficos da arquitetura para a qual foi gerado.

UFCG / DSC / PSN, 2005 Parte 1: Introduo

Pg. 8

COMPILADORES O mdulo de gerncia de tabela de smbolos tem por funo guardar informaes a respeito de todos os nomes usados pelo programa e registrar informaes importantes associadas a cada um, tais como seu tipo (inteiro, real, etc.), tamanho, escopo, etc. A estrutura de dados usada para registrar essas informaes chamada tabela de smbolos. Finalmente, o manipulador de erros ativado sempre que for detectado um erro no programa fonte. Ele deve avisar o programador da ocorrncia do erro emitindo uma mensagem, e ajustar-se novamente informao sendo passada de fase a fase de modo a poder completar o processo de compilao (mesmo que no seja mais possvel gerar cdigo objeto, a anlise lxica e sinttica deve prosseguir at o fim). Os mdulos de gerncia de tabela de smbolos e manipulao de erros interagem sempre com todos os outros mdulos do compilador. Na construo de um compilador, uma ou mais fases so combinadas em um nico bloco chamado passo. Um passo l o programa fonte ou a sada gerada pelo passo anterior, fazendo as transformaes especficas de suas fases, gravando sua sada em um arquivo temporrio que vai ser lido pelo passo posterior.

UFCG / DSC / PSN, 2005 Parte 1: Introduo

Pg. 9

COMPILADORES Quando vrias fases so agrupadas em um nico passo, suas operaes podem ser intercaladas com o devido controle de alternncia entre elas. O nmero de passos e o agrupamento de fases em cada passo so geralmente definidos em funo da estrutura da LP e das caractersticas da arquitetura para a qual o compilador vai gerar cdigo.

UFCG / DSC / PSN, 2005 Parte 1: Introduo

Pg. 10

S-ar putea să vă placă și