Está en la página 1de 61

Interpretadores e os Compiladores

begin if x = 5 then ...

+ params

output

1100111 0011100011

Cdigo Fonte

Compilador

Programa

Introduo
Linguagens: Homem: natural + notaes (como a matemtica) Mquina: nvel muito atmico (dgitos, binrios, registradores, memria etc) Soluo proposta: ling. Alto Nvel
Programa Fonte

Tradutor

Programa Objeto

Tradutor: Compilador ou Interpretador

Execuo de Programas
Programa em Linguagem de Mquina

Uma linguagem de programao um conjunto de ferramentas, regras de sintaxe e smbolos ou cdigos que nos permitem escrever programas de computador; A primeira e mais primitiva linguagem de computador a prpria linguagem mquina (0s e 1s);

Um programa era difcil, longo e principalmente caro de o construir.


Era tambm difcil de ser entendido por outros programadores; Essa complexidade levou necessidade de desenvolver novas tcnicas e ferramentas.

Execuo de Programas
Linguagem de Montagem

A resoluo do problema passou pela criao de uma linguagem em que os cdigos numricos foram substitudos por mnemnicos;
O nome dessa linguagem ASSEMBLY LANGUAGE; Ento ser necessrio um outro programa que leia o programa escrito nessa linguagem alternativa e o traduza para a linguagem nativa do computador; O processo de traduo da linguagem de montagem para a linguagem de mquina realizada por um programa chamado ASSEMBLER.

Execuo de Programas
Linguagem de Montagem

Execuo de Programas
Linguagem de Montagem

Execuo de Programas
Linguagem de Programao

Foram desenvolvidas diversas linguagens de programao:


FORTRAN (1957) ALGOL (1958) COBOL (1959) PASCAL (1963) BASIC (1965) ADA (1968) DoD (1969) C (1982) e mais tarde o C++ (1986) Etc.

Estas novas linguagens foram afastando cada vez mais o programador do nvel de mquina.

Execuo de Programas
Traduo

Os programas em linguagem de alto nvel tambm precisam de ser traduzidos para linguagem de mquina.

Traduo
Cdigo Fonte Cdigo Objecto

Execuo de Programas
Montagem

O processo de montagem traduz um programa escrito numa LP num programa equivalente em linguagem maquina.

Processo de Montagem
Cdigo Fonte
Traduo Linguagem de Mquina

Mas com o qu ???

Com Compiladores ou Interpretadores

Interpretadores

Interpretadores
Como funcionam os interpretadores

O funcionamento dos interpretadores muito parecido ao dos compiladores; O interpretador traduz o cdigo linha a linha; O cdigo fonte no totalmente traduzido antes de ser executado; No existem fases distintas nem se produz cdigo intermedirio; Passa o tempo todo a ler e a traduzir cdigo.

Interpretadores
Interpretador: o tradutor transforma uma L.P. numa linguagem simplificada, chamada Cdigo intermedirio, que pode ser diretamente executado usando um programa chamado interpretador.

Programa Fonte

Interpretador

Cdigo Intermedirio em Execuo

OBS: Podemos pensar na linguagem intermediria como sendo a linguagem de mquina de um computador abstrato designado a executar o cdigo fonte.

Interpretadores
Em alguns casos, a prpria linguagem fonte pode ser a linguagem intermediria. Por ex, a maioria das linguagens de comandos, na qual nos comunicamos diretamente com o sistema Operacional, so interpretadas sem nenhuma traduo prvia (Ex. DOS).

Os Interpretadores so em geral, menores que os Compiladores e facilitam as implementaes de L.P. A principal desvantagem que o tempo de execuo de um programa interpretado em geral, maior que o de um correspondente programa objeto compilado.

Interpretadores
Os Exemplos de interpretadores

Internet; Excel, Basic, Access, ... ; SmallTalk; Lisp;

Visual G.

Compiladores

Compiladores
O nome compilador, criado nos anos 50, faz referncia ao processo de composio de um programa pela reunio de vrias rotinas de biblioteca; o processo de traduo (de uma linguagem fonte para uma linguagem objeto).
Programa Linguagem Fonte

Compilador

Programa Linguagem Alvo

Mensagens de Erro

Compiladores
O que um compilador

Compiladores
O que um compilador

Um compilador tem a finalidade de converter uma linguagem Linguagem Fonte (de fcil escrita e leitura para os programadores), numa linguagem alvo ou objecto (que possa ser executada pelas mquinas); O cdigo executvel gerado pelo compilador dependente do sistema operacional e da linguagem de mquina para o qual o cdigo fonte foi traduzido;

A enorme variedade de compiladores existentes bem vinda, visto que existem milhares de linguagens fonte, e as linguagens alvo so tambm muito variadas.

Compiladores
O que um compilador

O primeiro compilador de FORTRAN, por exemplo, demorou 18 trabalhosos meses para implementar;

Boas linguagens de implementao, ambientes de programao, e ferramentas de software tambm vieram a ser desenvolvidas.

Compiladores
Variedade de Compiladores

Linguagem Fonte

Mquina Alvo

Fortran
C Pascal Modula Algol ...

Intel
Mips Sparc ...

A mquina alvo pode estar entre um microprocessador e um supercomputador

Compiladores
Primos de um compilador

Pr-processadores: produzem o input para os compiladores; Montadores: Alguns compiladores produzem cdigo Assembler que passado para um montador para posterior processamento;

Alguns compiladores produzem o trabalho dos montadores.

Compiladores
Primos de um compilador

Montagens bi-passo:

I Passo - todos os identificadores que denotam localizaes de armazenamento, so encontrados e armazenados numa tabela de smbolos II Passo - traduz cada cdigo de operao para sequncias de bits representando essa operao na linguagem mquina

Carregadores e editores de unio (Linker):

Consiste em tomar o restabelecimento do cdigo mquina, alterando os endereos restabelecidos e colocando as instrues alteradas e dados na memria nas localizaes convenientes. O editor de unio permite-nos fazer um nico programa dos vrios ficheiros de cdigo de mquina relocalizvel;

Compiladores
Primos de um compilador

Bibliotecas:
O desenvolvimento de um programa certamente utilizar diversas operaes que so comuns a muitos outros programas;
Um programa de alto nvel possivelmente conter diversas chamadas de biblioteca;

Essas funes no devem ser confundidas com as instrues da linguagem na realidade, so pequenos programas externos que so chamados atravs de instrues especiais chamado biblioteca.

Comparao
Vantagens
Execuo mais rpida

Desvantagens
Vrias etapas de traduo Programao final maior, necessitando mais memria para a sua execuo Processo de correco de erros e depurao mais demorado Execuo do programa mais lenta

Compiladores

Permite estruturas de programao mais completas Permite a optimizao do cdigo fonte Depurao do programa mais simples

Interpretadores

Consome menos memria


Resultado imediato do programa ou rotina desenvolvida

Estruturas de dados demasiado simples


Necessrio fornecer o programa fonte ao utilizador

Compiladores
Estrutura Geral de um Compilador
(Modelo de compilao de Anlise e Sntese) Anlise Lxica 1. Anlise Anlise Estrutural Anlise Sinttica

Anlise Semntica Gerao de Cdigo Intermedirio 2. Sntese


Otimizao de Cdigo Gerao de Cdigo Alvo

Compiladores
A interao entre os mdulos do compilador
Programa Fonte Anlise Lxica Sinttica Semntica Tratamento de Erros

Sntese Gerao de Cdigo Intermedirio Otimizao Cdigo Alvo


Programa Alvo

Fases de Compilao
implementao Cdigo fonte

Anlise Lxica
Tokens e Lexemas

Anlise Sinttica
abstrao

rvore sinttica abstrata

Anlise Semntica Sntese Cdigo mquina

Gerao de Cdigo

Compiladores
Modelo Anlise- sntese da compilao

Podemos dividir o processo de compilao em duas fases:


Anlise : parte o programa fonte em peas constituintes e cria uma representao intermdia do programa fonte;
Sntese : Constri o desejado programa alvo (cdigo de mquina) a partir da representao intermdia;

A parte da sntese a que requer tcnicas mais especializadas.

Compiladores
Estrutura Geral de um Compilador
(Modelo de compilao de Anlise e Sntese) Anlise Lxica 1. Anlise Anlise Estrutural Anlise Sinttica

Anlise Semntica Gerao de Cdigo Intermedirio 2. Sntese


Otimizao de Cdigo Gerao de Cdigo Alvo

Compiladores
Anlise do programa fonte

Anlise Lxica ou Linear:

Em que a cadeia de caracteres que forma a estrutura do programa fonte lido da esquerda para a direita e agrupado em tokens. A sua funo bsica o reconhecimento e a classificao das estruturas elementares ou classes sintcticas das linguagens.

Anlise Lexica

Anlise Lexica

Anlise Lexica

Compiladores
Estrutura Geral de um Compilador
(Modelo de compilao de Anlise e Sntese) Anlise Lxica 1. Anlise Anlise Estrutural Anlise Sinttica

Anlise Semntica Gerao de Cdigo Intermedirio 2. Sntese


Otimizao de Cdigo Gerao de Cdigo Alvo

Compiladores
Anlise do programa fonte

Anlise sintctica ou hierrquica:


Na qual caracteres ou tokens so agrupados hierarquicamente em coleces aninhadas com sentido coletivo. Verifica se a estrutura geral do texto ou programa fonte est correcta.

Anlise Sinttica

Anlise Sinttica

Anlise Sinttica

Anlise Sinttica
while I < 100 do I := J + I ;

Anlise Lexica e Sinttica

Anlise Sinttica

Compiladores
Estrutura Geral de um Compilador
(Modelo de compilao de Anlise e Sntese) Anlise Lxica 1. Anlise Anlise Estrutural Anlise Sinttica

Anlise Semntica Gerao de Cdigo Intermedirio 2. Sntese


Otimizao de Cdigo Gerao de Cdigo Alvo

Anlise do programa fonte

Compiladores

Anlise semntica:
Verifica o programa em relao a possveis erros semnticos e guarda informaes adicionais. A anlise semntica trata os aspectos sensveis ao contexto da sintaxe das linguagens de programao. Ex.: "Toda varivel deve ser declarada antes de ser usada!. A verificao se essa regra foi aplicada cabe anlise semntica.

Anlise Semntica

Funes:
Verificar se o significado das construes sintticas possibilitam a gerao de cdigo; Extrair informaes do programa fonte que possibilitem a gerao de cdigo; Por exemplo, o seguinte comando IF, sintaticamente correto, pode existir em um programa: if a>7 then b:=5 else b:=10;
Depende dos tipos das variaveis a e b

Anlise Semntica
Principais verificaes semnticas:
Compatibilidade de tipos
... var A: boolean; B: real; ... A:=B+0,5;

Anlise Semntica
Duplicidade de identificadores:
Var A, A, B: integer;

Compatibilidade entre declaraes e uso de entidades:


Var X: array[1..N] of byte; A: byte; ... A:=X.C1; ou A:=X[1];

Anlise Semntica
Compatibilidade entre parmetros formal e atual:
procedure X (a, b: integer); begin ... end; ... X(a, b, c);

Compiladores
Estrutura Geral de um Compilador
(Modelo de compilao de Anlise e Sntese) Anlise Lxica 1. Anlise Anlise Estrutural Anlise Sinttica

Anlise Semntica Gerao de Cdigo Intermedirio 2. Sntese


Otimizao de Cdigo Gerao de Cdigo Alvo

Constri o programa-destino a partir da representao intermediria.

Compiladores
Estrutura Geral de um Compilador
(Modelo de compilao de Anlise e Sntese) Anlise Lxica 1. Anlise Anlise Estrutural Anlise Sinttica

Anlise Semntica Gerao de Cdigo Intermedirio 2. Sntese


Otimizao de Cdigo Gerao de Cdigo Alvo

Gerao do Cdigo Intermedirio


O gerador de cdigo intermedirio ser acionado quando o programa for analisado lxica, sinttica e semanticamente.
x:=(a+c)*(d-10); Gera a seguinte tabela de Cod. Int.

Gerao do Cdigo Intermedirio


Para if e while deve-se manter saltos (ou jumps GOTO), para que determinados trechos de cdigo possam ser evitados na hora da execuo.

Compiladores
Estrutura Geral de um Compilador
(Modelo de compilao de Anlise e Sntese) Anlise Lxica 1. Anlise Anlise Estrutural Anlise Sinttica

Anlise Semntica Gerao de Cdigo Intermedirio 2. Sntese


Otimizao de Cdigo Gerao de Cdigo Alvo

Otimizao do Cdigo
Realiza transformaes no cdigo visando melhorar sua performance em aspectos de tempo de execuo, uso de memria, tamanho do cdigo executvel etc. Estratgias bsicas de otimizao: Eliminao de cdigo redundante: busca detectar situaes onde a traduo de duas expresses gera instrues cuja execuo repetida no tem efeito. Por exemplo: x := y ..(codigo).. x := y Eliminao de cdigo no-alcanvel, ou cdigo morto. Ex.: Em um comando de deciso o cdigo nunca alganado! Uso de propriedades algbricas, quando o compilador identifica que uma expresso aritmtica foi reduzida a: ou ento o compilador reduz a expresso a:

Tratamento de Erros...

Em todas as fases...

Tratamento de Erros...

Linguagens: C e C++... so compiladas estaticamente, e seus cdigos fontes so transformados diretamente em linguagem de mquina. Java, C# e Python tm seus cdigos fontes transformados em uma linguagem intermediria (especfica de cada linguagem), que ser interpretada pela mquina virtual da linguagem quando o programa for executado.