conversões de linguagens

Embed Size (px)

Citation preview

  • 7/23/2019 converses de linguagens

    1/12

    Converses de Linguagens:

    Traduo, Montagem,

    Compilao, Ligao eInterpretao

    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 circuitosdo 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 e0s; imagine que para cada diferente marca ou modelo de

    computador, as regras para entender esses cdigos sero

    http://www.diegomacedo.com.br/conversoes-de-linguagens-traducao-montagem-compilacao-ligacao-e-interpretacao/http://www.diegomacedo.com.br/conversoes-de-linguagens-traducao-montagem-compilacao-ligacao-e-interpretacao/http://www.diegomacedo.com.br/conversoes-de-linguagens-traducao-montagem-compilacao-ligacao-e-interpretacao/http://www.diegomacedo.com.br/conversoes-de-linguagens-traducao-montagem-compilacao-ligacao-e-interpretacao/http://www.diegomacedo.com.br/conversoes-de-linguagens-traducao-montagem-compilacao-ligacao-e-interpretacao/http://www.diegomacedo.com.br/conversoes-de-linguagens-traducao-montagem-compilacao-ligacao-e-interpretacao/http://www.diegomacedo.com.br/conversoes-de-linguagens-traducao-montagem-compilacao-ligacao-e-interpretacao/http://www.diegomacedo.com.br/conversoes-de-linguagens-traducao-montagem-compilacao-ligacao-e-interpretacao/
  • 7/23/2019 converses de linguagens

    2/12

    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 paratornar 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. Ouseja, 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 linguagemsimblica pelo programador, chamado cdigo fonte (source code)

    para a linguagem de mquina do computador chamada cdigo

  • 7/23/2019 converses de linguagens

    3/12

    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

  • 7/23/2019 converses de linguagens

    4/12

    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 pelagramtica.

    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 anlisesemntica.

    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 intermediriogera uma instruo para cada operador na rvore sinttica,

    mesmo que exista uma maneira mais otimizada de realizar o

  • 7/23/2019 converses de linguagens

    5/12

    mesmo comando.

    Gerao de Cdigo

    A fase final do compilador a gerao do cdigo para o

    programa objeto, consistindo normalmente de cdigo emlinguagem 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 porinstruo e feita a traduo, gerando o cdigo que ser

    executado (cdigo objeto). Os passos executados pelo programa

  • 7/23/2019 converses de linguagens

    6/12

    Montador so:

    Verificar a correo do cdigo de instruo (se o1.

    mnemnico corresponde a uma instruo vlida para o

    computador, se os campos definidos na estrutura da

    linguagem e a sintaxe esto corretos) e substituir osmnemnicos pelos cdigos numricos binrios

    equivalentes. Qualquer erro no cdigo acarreta a

    interrupo do processo e a emisso de mensagem de erro.

    Resolver as referncias de memria: os nomes simblicos2.

    adotados pelo programador so convertidos para endereos

    reais de memria (valores numricos binrios de

    endereos).Reservar espao em memria para o armazenamento das3.

    instrues e dados.

    Converter valores de constantes em binrio.4.

    Compilao

    Compilao o processo de traduo de um programa escrito emlinguagem 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 fonteresulta em uma instruo de mquina, enquanto na compilao a

    relao mltipla, cada instruo do cdigo fonte gerando

    vrias instrues de mquina.

  • 7/23/2019 converses de linguagens

    7/12

    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

  • 7/23/2019 converses de linguagens

    8/12

    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. Porexemplo, 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 precisaser substituda pelo cdigo propriamente dito, incluindo os

    parmetros necessrios.

  • 7/23/2019 converses de linguagens

    9/12

    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 cadachamada 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) eobter 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.

  • 7/23/2019 converses de linguagens

    10/12

    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 paracdigo 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 cdigosintermedirios. 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

  • 7/23/2019 converses de linguagens

    11/12

    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:

  • 7/23/2019 converses de linguagens

    12/12

    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 imediatamenteexecutvel. 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 pr-processamento 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