Você está na página 1de 3

Professora Isabel Harb Manssour

Paradigmas de Linguagens I 1
1.7. Tradutores de Linguagens de Programao: Conceitos Bsicos
O objetivo de qualquer linguagem a comunicao entre duas partes, um emissor e um receptor. Em LP, a
comunicao ocorre entre um programador e um programa tradutor. O objetivo deste programa tradutor aceitar
um conjunto de instrues escritas em uma linguagem de programao de alto nvel, que independente da
mquina, e fazer com que as atividades especificadas por estas instrues sejam executadas pelo computador. Em
outras palavras, como os computadores s podem executar programas escritos em linguagem de mquina,
programas escritos em linguagem de alto nvel devem ser traduzidos para verses equivalentes em linguagem de
mquina, antes de serem executados [DER 90, WAT 90].
Existem dois tipos fundamentais de tradutores: interpretadores e compiladores. No caso de um
interpretador, as instrues definidas na linguagem de alto nvel so executadas diretamente. Ele traduz um
comando de um programa de cada vez e ento chama uma rotina para completar a execuo do comando, como
ilustrado na figura 1.12. Mais precisamente, um interpretador um programa que executa repetidamente a seguinte
seqncia:
Pega a prxima instruo;
Determina as aes a serem executadas;
Executa estas aes [DER 90, GHE 97].
Figura 1.12 Processo de interpretao [GHE 97]
J um compilador produz a partir do programa de entrada, outro programa que equivalente ao original,
porm numa linguagem que executvel. Este programa resultante pode ser em uma linguagem que diretamente
executvel, tal como linguagem de mquina, ou indiretamente executvel, tal como outra linguagem para a qual j
existe um tradutor.
Cada um destes processos tem suas vantagens e desvantagens. Interpretao, apesar de ter um tempo maior
de execuo, tem a vantagem de no traduzir instrues que nunca so executadas e de conseguir voltar instruo
correspondente na LP a partir de qualquer ponto da execuo. O compilador, por outro lado, precisa traduzir cada
instruo somente uma vez, independente de quantas vezes a instruo executada. Isto aplica-se tanto no caso de
iterao como no caso de execues repetidas do mesmo programa. As vantagens de um compilador em geral
superam as do interpretador na prtica, o que faz com que esta forma de traduo seja uma das mais usadas. Por
esta razo, e porque a compilao um processo mais complexo, as atividades de um compilador sero
detalhadamente descritas [DER 90].
O objetivo de um compilador traduzir um programa escrito em uma linguagem fonte em um programa
equivalente expresso em uma linguagem que executvel diretamente pela mquina. Estes dois programas so
chamados programa fonte (ou cdigo fonte) e programa objeto (ou cdigo objeto). A linguagem do programa
objeto chamada de linguagem target. A figura 1.13 mostra uma viso do processo de compilao onde o
programa objeto executado diretamente. O tempo durante o qual o compilador est trabalhando, isto ,
realizando a converso entre cdigo-fonte e cdigo-objeto, chamado de tempo de compilao. O tempo durante o
qual o programa objeto executado chamado tempo de execuo.
A compilao pode ser dividida em vrias fases. Estas fases so conceituais e especificam atividades que
todos os compiladores executam, embora freqentemente as atividades de vrias fases possam ser combinadas e
executadas simultaneamente. Estas fases esto resumidamente ilustradas na figura 1.14.
Interpretador
Dados de
Entrada
Dados de
Sada
Programa
Professora Isabel Harb Manssour
Paradigmas de Linguagens I 2
Figura 1.13 - Processo de compilao [DER 90]
Figura 1.14 - Fases da compilao
As fases apresentadas no modelo da figura 1.15 possuem, resumidamente, as seguintes funes:
Tabela de Smbolos: contm uma entrada para cada smbolo definido pelo usurio ou identificador includo no
programa fonte. Possui uma importncia fundamental, uma vez que montada durante a anlise do programa
fonte, com informaes sobre declaraes de variveis, declaraes dos procedimentos ou sub-rotinas,
parmetros de sub-rotinas, etc., e usada para comunicao entre fases.
Anlise Lxica: tem como funo identificar seqncias de caracteres de entrada e produzir como sada uma
seqncia de elementos, os tokens. O analisador lxico l caracter a caracter do texto fonte verificando se os
caracteres lidos pertencem ao alfabeto da linguagem, identificando tokens, desprezando comentrios e brancos,
e convertendo caracteres para minsculas. Os tokens, menores elementos que contm informao em uma
linguagem, constituem classes de smbolos, tais como, palavras reservadas, delimitadores, identificadores, etc.
Anlise Sinttica: consiste no processo de identificar seqncias de smbolos que constituem estruturas
sintticas (por exemplo, expresses, comandos), atravs de uma varredura, ou parsing, da representao interna
(cadeia de tokens) do programa fonte. O analisador sinttico produz (explcita ou implicitamente) uma estrutura
em rvore, chamada rvore de derivao, que exibe a estrutura sinttica do texto fonte, resultante da aplicao
das regras gramaticais da linguagem
Anlise Semntica: tem como principal atividade determinar se as estruturas sintticas analisadas fazem
sentido, ou seja, se um identificador declarado como varivel usado como tal; se existe compatibilidade entre
operandos e operadores em expresses; etc. Resumindo, o analisador semntico verifica se o programa no
possui erros de significado.
Gerao de Cdigo: utiliza a representao interna produzida pelo analisador sinttico e gera como sada uma
seqncia de cdigo objeto. Tambm responsvel pela reserva de memria para dados e variveis, gerao de
cdigo para acessar tais posies, seleo de registradores, etc.
Dados de
Entrada
Dados de
Sada
Mquina
Programa
Objeto
Programa
Fonte
Compilador
Tabela de
Smbolos
Anlise Lxica
Anlise Semntica
Anlise Sinttica
Gerao de Cdigo
Programa Fonte
Programa Objeto
Professora Isabel Harb Manssour
Paradigmas de Linguagens I 3
Torna-se interessante comentar que o compilador tambm possui uma fase de otimizao, que refere-se ao
processo de transformar o programa em um programa equivalente que resultar numa execuo mais eficiente. Esta
modificao pode ser feita no programa fonte, no programa objeto ou em qualquer outra forma do programa
durante o processo de compilao. O objetivo construir um programa que executar mais rpido ao mesmo tempo
que mantm a funcionalidade do programa fonte original [DER 90].
Para gerao do cdigo executvel final (cdigo que pode ser executado pelo sistema operacional),
entretanto, existem outros passos alm da compilao. A figura 1.15 ilustra o processo de gerao do cdigo
executvel. No primeiro passo, o pr-processador mapea instrues escritas numa linguagem de alto nvel
estendida, para instrues da linguagem de programao original. Entre as funes que ele pode realizar incluem-
se: processamento de macros (as evocaes a macro-rotinas so traduzidas para o cdigo original da macro);
incluso de arquivos (referncias a arquivos so substitudas pelo prprio arquivo); racionalizao (substituio de
cdigo no oferecido pelo compilador por cdigo equivalente suportado por ele); e extenso da linguagem (suporte
a novos aspectos). O compilador analisa o cdigo-fonte e o converte para um cdigo-assembly (verso mnemnica
da linguagem de mquina). O montador traduz o cdigo assembly para cdigo de mquina (cdigo objeto). Porm,
esta forma intermediria, no podendo ser lida pelo programador, nem executada pelo computador. Este cdigo
pode ser relocvel (carregvel para a execuo em qualquer posio de memria) ou absoluto (carregvel a partir
de uma posio absoluta). Finalmente, o carregador/ligador executa duas tarefas: carregar, que consiste em tomar
o cdigo relocvel, alterar os endereos necessrios e colocar o cdigo e os dados na localizao de memria
adequada; e ligar, que consiste em juntar o cdigo objeto com as bibliotecas necessrias para gerar o programa
executvel. O tempo aps a ativao do programa executvel chamado tempo de execuo [HAN 86].
Figura 1.15 - Processo de gerao do cdigo executvel
Biblioteca
Programa Executvel
Montador
Compilador
Carregador/Ligador
Cdigo-Assembly
Cdigo-Fonte Expandido
Cdigo-Objeto
Pr-Processador
Cdigo-Fonte

Você também pode gostar