You are on page 1of 12

Converses de Linguagens:

Traduo,
Montagem,
Compilao,
Ligao
e
Interpretao
Para executar uma tarefa qualquer, um computador precisa
receber instrues precisas sobre o que fazer. Uma seqncia
adequada de instrues de computador, para a realizao de uma
determinada tarefa, se constitui num PROGRAMA de computador.
Uma linguagem de programao um conjunto de ferramentas,
regras de sintaxe e smbolos ou cdigos que nos permitem
escrever programas de computador, destinados a instruir o
computador para a realizao de suas tarefas.
A primeira e mais primitiva linguagem de computador a
prpria linguagem de mquina, aquela que o computador entende
diretamente e pode ser diretamente executada pelos circuitos
do processador (pelo hardware). No incio da era da
computao, os programas eram escritos em linguagem de
mquina, isto , as instrues eram escritas diretamente na
linguagem do computador (formada apenas com 1s e 0s). Um
programa em linguagem de mquina uma longa srie de 0s e
1s, ordenados de forma que alguns representam cdigos de
instrues e outros representam os dados que sero processados
(ou indicam onde esses dados esto armazenados). Em um
programa escrito em linguagem de mquina, cada instruo
escrita pelo programador ser individualmente executada, isto
, a cada instruo do programa corresponder uma ao do
computador. A relao portanto 1 para 1 uma instruo do
programa corresponde a uma operao do computador.
Imagine ento um programa extenso escrito apenas usando 1s e
0s; imagine que para cada diferente marca ou modelo de
computador, as regras para entender esses cdigos sero

totalmente diferentes; e finalmente imagine que voce teria que


escrever uma a uma as instrues e os dados adequadamente
codificados e ordenados, perfurar todos o programa em cartes
e submeter toda a massa de cartes ao computador, para
finalmente receber algumas horas depois o seu programa de
volta com uma mensagem de erro tipo erro no carto X e
mais nada! Um programa escrito nessa linguagem era difcil de
ser escrito sem que se cometessem muitos erros, processo esse
longo, difcil, entediante e principalmente caro. Um programa
em linguagem de mquina era tambm extremamente difcil de ser
entendido por outros programadores que futuramente viessem a
trabalhar na manuteno do programa. Essa complexidade levou
necessidade de se desenvolverem tcnicas e ferramentas para
tornar a escrita e manuteno de programas mais fcil, mais
rpida e principalmente mais barata.
Cada famlia de computadores possui sua prpria linguagem de
mquina. Um programa em linguagem de mquina dependente do
computador ou seja, tendo sido escrito para um determinado
computador, somente poder ser executado em computadores da
mesma famlia, que lhe sejam 100% compatveis.

Traduo
Um programa escrito por um programador (chamado cdigo fonte)
em uma linguagem de alto nvel um conjunto de instrues que
clara para programadores, mas no para computadores. Ou
seja, os computadores entendem nica e exclusivamente suas
linguagens nativas, as linguagens de mquina. Programas em
linguagem de alto nvel, a exemplo dos programas escritos em
linguagem de Montagem, tambm precisam ser traduzidos para
linguagem de mquina para poderem ser submetidos ao computador
e processados.
O processo de traduo do programa escrito em uma linguagem
simblica pelo programador, chamado cdigo fonte (source code)
para a linguagem de mquina do computador chamada cdigo

objeto (object code), chamado compilao e realizado por


um programa chamado Compilador (Compiler).
Traduo sucessiva de uma linguagem para outra intermediria
mais simples, da linguagem fonte at linguagem objeto.

Cada traduo pode dividir-se nas seguintes fases:


Anlise Lxica (scanner)
Ele separa a sequncia de caracteres que representa o
programa fonte em entidades ou tokens, smbolos bsicos da
linguagem. Durante a anlise lxica, os tokens so
classificados como palavras reservadas, identificadores,
smbolos especiais, constantes de tipos bsicos (inteiro
real, literal, etc.), entre outras categorias. Basicamente
reconhecer as sequncias de smbolos que representam uma
unidade. Ex.: o nome de uma varivel, uma constante, uma
palavra chave de uma instruo (while).
Um token consiste de um par ordenado (valor, classe). A
classe indica a natureza da informao contida em valor.
Outras funes atribudas ao analisador lxico so: ignorar
espaos em branco e comentrios, e detectar erros lxicos.
Anlise Sinttica (parser)
Ele agrupa os tokens fornecidos pelo analisador lxico em
estruturas sintticas, construindo a rvore sinttica
correspondente. Para isso, utiliza uma srie de regras de
sintaxe, que constituem a gramtica da linguagem fonte. a
gramtica da linguagem que define a estrutura sinttica do

programa fonte.
O analisador sinttico tem tambm por tarefa o
reconhecimento de erros sintticos, que so construes do
programa fonte que no esto de acordo com as regras de
formao de estruturas sintticas como especificado pela
gramtica.
Identifica a estrutura gramatical do programa e reconhece o
papel de cada componente. normalmente construda
uma rvore sinttica do programa e uma tabela de smbolos,
que identifica variveis.
Analisador Semntico
O compilador executa ainda a anlise semntica. O analisador
semntico utiliza a rvore sinttica determinada pelo
analisador sinttico para: identificar operadores e
operandos das expresses, reconhecer erros semnticos, fazer
verificaes de compatibilidade de tipo, analisar o escopo
das variveis, fazer verificaes de correspondncia entre
parmetros atuais e formais.
Fundamentalmente, a anlise semntica trata os aspectos
sensveis ao contexto da sintaxe das linguagens de
programao. Por exemplo, no possvel representar em uma
gramtica livre de contexto uma regra como Todo
identificador deve ser declarado antes de ser usado., e a
verificao de que essa regra foi aplicada cabe anlise
semntica.
Otimizao de Cdigo
O processo de otimizao de cdigo consiste em melhorar o
cdigo intermedirio de tal forma que o programa objeto
resultante seja mais rpido em tempo de execuo. Por
exemplo, um algoritmo para gerao do cdigo intermedirio
gera uma instruo para cada operador na rvore sinttica,
mesmo que exista uma maneira mais otimizada de realizar o

mesmo comando.
Gerao de Cdigo
A fase final do compilador a gerao do cdigo para o
programa objeto, consistindo normalmente de cdigo em
linguagem assembly ou de cdigo em linguagem de mquina.
Aqui o processo de construir instrues da linguagem
mquina (em assembly, normalmente) que simulam as instrues
reconhecidas pelo analisador sintctico. A gerao de cdigo
pode englobar: anlise semntica, gerao de cdigo
intermdio, otimizadores e gerao de cdigo final.

Montagem
Citamos anteriormente uma forma de traduo rpida e simples:
a executada pelo programa Montador. O processo de montagem
traduz um programa escrito em linguagem Assembly em um
programa equivalente em linguagem de mquina, possvel de ser
executado pelo computador.
A seguir, apresentado o fluxo que representa o processo de
montagem.

No processo de montagem, o cdigo fonte (programa em linguagem


simblica escrito pelo programador) examinado, instruo por
instruo e feita a traduo, gerando o cdigo que ser
executado (cdigo objeto). Os passos executados pelo programa

Montador so:
1. Verificar a correo do cdigo de instruo (se o
mnemnico corresponde a uma instruo vlida para o
computador, se os campos definidos na estrutura da
linguagem e a sintaxe esto corretos) e substituir os
mnemnicos
pelos
cdigos
numricos
binrios
equivalentes. Qualquer erro no cdigo acarreta a
interrupo do processo e a emisso de mensagem de erro.
2. Resolver as referncias de memria: os nomes simblicos
adotados pelo programador so convertidos para endereos
reais de memria (valores numricos binrios de
endereos).
3. Reservar espao em memria para o armazenamento das
instrues e dados.
4. Converter valores de constantes em binrio.

Compilao
Compilao o processo de traduo de um programa escrito em
linguagem de alto nvel para cdigo em linguagem de mquina.
Compilao um processo anlogo ao da montagem (verificao /
anlise do cdigo fonte, resoluo das referncias de memria,
reserva de espao em memria e converso para cdigo de
mquina binrio). O que diferencia a compilao do processo de
montagem sua maior complexidade. No processo de montagem, h
uma relao de 1:1, ou seja, cada instruo do cdigo fonte
resulta em uma instruo de mquina, enquanto na compilao a
relao mltipla, cada instruo do cdigo fonte gerando
vrias instrues de mquina.

Durante a compilao, o cdigo fonte analisado (anlise


lxica, sinttica e semntica), gerado um cdigo
intermedirio e so construdas tabelas de smbolos, alocam-se
as reas de memria para variveis e atribui-se os
registradores a serem utilizados, e finalmente gerado o
cdigo objeto em linguagem binria de mquina. Em alguns
compiladores, gerado um cdigo intermedirio em Assembly
(que pode ser visualizado pelo programador) e que em seguida
passa pelo montador para gerar finalmente o cdigo objeto em
linguagem de mquina.
O cdigo objeto pode ser absoluto (os endereos constantes so
endereos reais de memria) ou relocvel (os endereos so
relativos, tendo como referncia o incio do programa, e os
endereos reais de memria so definidos apenas em tempo de
execuo).
Tipos de Compiladores:
Single-Pass: compilao numa nica leitura do programa
fonte
Multi-Pass: compilao atravs de vrias leituras do
programa fonte
Load-And-Go: compilao e a execuo do programa fonte
Debugging: compilao permitindo a depurao do programa
fonte
Optimizing: compilao e a otimizao do programa alvo

Vantagens:
O cdigo compilado mais rpido de ser acessado;
Impossibilita ou pelo menos dificulta ser quebrado e
visualizado o cdigo-fonte original;
Permite otimizao do cdigo por parte do compilador;
Compila o cdigo somente se estiver sem algum erro.
Desvantagens:
Para ser utilizado o cdigo precisa passar por muitos
nveis de compilao;
Assim como vantagem a possibilidade de no poder
visualizar o cdigo-fonte, pode ser uma desvantagem;
Processo de correo ou alterao do cdigo requer que
ele seja novamente recompilado.

Bibliotecas
O desenvolvimento de um programa certamente utilizar diversas
operaes que so comuns a muitos outros programas. Por
exemplo, a execuo de uma instruo de entrada e sada, a
classificao dos dados de um arquivo, o clculo de funes
matemticas, etc. Uma linguagem de alto nvel geralmente
incorpora diversas rotinas prontas (que fazem parte da
linguagem) e que compem bibliotecas (librarys) de funes
pr-programadas que podero ser utilizadas pelo programador,
poupando tempo, aumentando a eficincia e evitando erros.
Dessa forma, um programa em alto nvel possivelmente conter
diversas chamadas de biblioteca (library calls). Essas funes
no devem ser confundidas com as instrues da linguagem na
realidade, so pequenos programas externos que so chamados
atravs de instrues especiais de chamada de biblioteca. Para
serem executadas, essas rotinas precisam ser incorporadas ao
cdigo do programador, isto , a chamada de biblioteca precisa
ser substituda pelo cdigo propriamente dito, incluindo os
parmetros necessrios.

Ligao
Assim, o cdigo objeto preparado pelo compilador em geral no
imediatamente executvel, pois ainda existe cdigo (as
rotinas de biblioteca) a ser incorporado ao programa. A cada
chamada de biblioteca encontrada no cdigo fonte, o compilador
precisar incluir uma chamada para a rotina e o endereo dos
dados que devam ser passados para a rotina.
A tarefa de examinar o cdigo objeto, procurar as referncias
a rotinas de biblioteca (que constituem referncias externas
no resolvidas), buscar a rotina da biblioteca, substituir a
chamada pelo cdigo (resolver as referncias externas) e
obter os parmetros para inclu-los no cdigo objeto
executada por um programa chamado Ligador (LinkEditor). O
resultado da execuo do Ligador o cdigo final pronto para
ser executado pelo computador, chamado mdulo de carga ou
cdigo executvel.

O mdulo de carga, aps testado e depurado (isto , depois de


resolvidos todos os erros, tambm chamados bugs)
armazenado em memria de massa para ser executado quando
necessrio. O processo de compilao e ligao executado
apenas pelo programador na fase de desenvolvimento e no mais
precisar ser executado pelo usurio, quando da execuo do
programa.

Interpretao
Com o processo de execuo de um programa em fases distintas
(compilao / ligao / execuo) apresentado, um programa
para ser executado precisa primeiro ter sido convertido para
cdigo objeto pelo compilador e depois ter passado pelo
ligador. Esse processo o mais largamente utilizado, porm
no o nico.
O mtodo alternativo chama-se de interpretao e, a partir do
programa fonte, realiza as trs fases (compilao, ligao e
execuo), comando por comando, em tempo de execuo. No
existem fases distintas nem se produzem cdigos
intermedirios. Todo o processo de converso efetuado em
tempo de execuo e imediatamente executado. Ou seja, cada
comando lido, verificado, convertido em cdigo executvel e
imediatamente executado, antes que o comando seguinte seja
sequer lido.

Linguagens como C, Pascal, COBOL, etc, so linguagens


tipicamente compiladas, enquanto o BASIC foi desenvolvido como
linguagem interpretada (hoje tambm existem linguagens BASIC
compiladas e o programador pode optar). As linguagens de
programao tipicamente de usurio, tais como das planilhas
Excel, o Word Basic (linguagem de construo de Macros do
Word), o Access, etc, so todas linguagens interpretadas.
Uma vantagem que o ciclo de escrita, execuo, modificao
mais rpido em relao compilao. Por outro lado, a
execuo mais lenta.
No programa em linguagem de alto nvel, os interpretadores

executam os passos definidos para cada instruo e produzem o


mesmo resultado que o do programa compilado. Entretanto, a
execuo de um programa em linguagem de alto nvel com o uso
de interpretadores mais lenta que a execuo de um programa
compilado, uma vez que precisa examinar cada instruo no
programa-fonte, medida que ela ocorre, e desviar para a
rotina que executa a instruo.
Vantagens:
Correes e alteraes so mais rpidas de serem
realizadas;
Cdigo no precisa ser compilado para ser executado;
Consomem menos memria.
Desvantagens:
Execuo mais lenta do programa;
Necessita sempre ser lido o cdigo original para ser
executado;
Veja o comparativo abaixo:

Bytecode
Traduzindo ao p da letra, cdigo em bytes no confundir
com cdigo-mquina, o resultado de um processo semelhante ao
dos compiladores de cdigo-fonte que no imediatamente
executvel. Em oposio, o bytecode ir ser interpretado
numa mquina virtual, que far a execuo. Assim, o bytecode
um estgio intermdio entre o cdigo-fonte (escrito
numa linguagem de programao especfica) e a aplicao final,
sendo a sua vantagem principal a dualidade entre
a portabilidade o bytecode ir produzir o mesmo resultado em
qualquer arquitetura e a ausncia da necessidade do prprocessamento tpico dos compiladores o bytecode encarado
como um produto final, cuja validao da sintaxe e tipos de
dados (entre outras funes dos compiladores) no ser
necessria.
Como exemplo de plataformas que geram bytecode,
temos Java (que corre sobre a mquina virtual Java), .NET (que
corre sobre a Common Language Runtime) e Lua.
Fontes:
http://wwwusers.rdc.puc-rio.br/rmano/processo.html

http://www.dcc.fc.up.pt/~nam/aulas/0001/ic/slides/sliic0018/no
de3.html
http://gec.di.uminho.pt/discip/TextoAC/cap1.html

http://www.dcc.fc.up.pt/~nam/aulas/0001/ic/slides/sliic0018/no
de4.html
http://www.oficinadanet.com.br/artigo/1527/diferencas_entre_
compiladores_e_interpretadores
http://angela-santana.zip.net/
http://www.cin.ufpe.br/~pftbm/apostila-LFeC-II.pdf

You might also like