43
Processadores de Linguagens 1. Tradutores e interpretadores 2. Bootstrapping

Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Embed Size (px)

Citation preview

Page 1: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Processadores de Linguagens

1. Tradutores e interpretadores

2. Bootstrapping

Page 2: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Tradutores e Compiladores

• Tradutores recebem um texto expresso em uma linguagem fonte e geram um texto semanticamente equivalente em uma linguagem destino.– Chinês para inglês– Java para C– Java para x86– x86 assembler

Page 3: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Assembler x Compilador

• Um assembler traduz de uma linguagem de montagem para o código de máquina correspondente. Uma instrução de máquina para cada instrução em assembly language.

• Um compilador traduz de uma linguagem de alto nível para uma linguagem de baixo nível. Várias instruções de máquina para cada linha de comando da linguagem de alto-nível.

Page 4: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Outros tipos de tradutores

• Tradutores entre linguagens de alto nível.

• Disassembler

• De(s)compilador

Page 5: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Linguagens

• Linguagem fonte

• Linguagem destino

• Linguagem de implementação

Page 6: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Diagramas: Programas

• Programa P expresso na linguagem L

P

L

graph

Basic

sort

x86

sort

Java

Page 7: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Diagramas: Máquinas

• Máquina M

M

SPARCPPCx86

Page 8: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Diagrama: execução

• Rodando programa P na máquina M

P

M

M

sort

PPC

PPC

sort

PPC

x86

sort

Java

x86

Page 9: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Diagrama: tradutores

• Tradutor de S para T expresso na linguagem L

S

L

T

Java

C

x86 Java

x86

x86 Java

C++

C x86 ass.

x86

x86

Page 10: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Diagrama: tradução• Tradução de um programa fonte P expresso

na linguagem S em um programa objeto expresso na linguagem T usando um tradutor de S para T executando na máquina M P

S

P

TS

M

T

M

Page 11: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Tradução: Exemplo

sort

Java

sort

x86Java

x86

x86

x86

sort

x86

x86

Page 12: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Cross-compiler

• Roda em uma máquina hospedeira, mas gera código para outra máquina.

• Usado quando a máquina destino tem pouca memória, não tem compilador ou outras ferramentas.

Page 13: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Cross-compiler

sort

Java

sort

PPCJava

x86

PPC

x86

sort

PPC

PPC

Page 14: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Interações ilegais

sort

Java C

x86

x86

x86

sort

Java Java

x86

x86

PPC

Page 15: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Compilação em dois estágios

sort

Java

sort

CJava

x86

C

x86

C

x86

x86

x86

sort

x86

Page 16: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Compilação em N estágios

sort

C

sort

CC

x86

C

x86

C ASM

x86

x86

sort

ASM

C preprocesso

r

ASM x86

x86

x86

sort

x86

C compile

r

Assembler

Page 17: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Compilando um compilador

C

x86

x86

x86

Java

C

x86 Java

x86

x86

Page 18: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Compiladores

• Permitem execução dos programas com máxima performance, em linguagem de máquina.

• Entretanto existe o tempo de espera pela compilação.

Page 19: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Interpretadores

• Recebem um programa fonte escrito em uma linguagem fonte, e o executam imediatamente.

• Lê, analisa e executa as instruções do programa fonte, uma de cada vez.

• Resultados imediatos, sem a tradução do programa para código objeto antes da execução.

Page 20: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Uso de Interpretadores

• Programador trabalha em modo interativo, e quer ver o resultado de uma instrução antes de entrar a próxima;

• Programas descartáveis, em que velocidade de execução não é tão importante;

• Execução de instruções apenas um vez, ou raramente;

• Formato de instruções simples, podendo ser analisada fácil e eficientemente.

Page 21: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Uso de Interpretadores

• Execução (de linguagem de alto nível) até 100 vezes mais lenta que a versão compilada;

• Inadequado quando o programa vai ser executado em produção, ou executado frequentemente, ou instruções tem formato complicado, difícil de ser analisado.

Page 22: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Exemplos de Interpretadores

• Basic: expressões e atribuições de alto nível, mas estruturas de controle de baixo nível (desvio condicional/incondicional);

• Lisp: estrutura de árvore para código e dados, podendo gerar código em tempo de execução;

• Shell do Unix e do DOS• Interpretador SQL

Page 23: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Representação de um interpretador

S

L

• Interpretador de S expresso na linguagem L

SQL

x86

shell

C

shell

SPARC

Basic

x86

Page 24: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Representação de um interpretador

S

M

• Interpretação de um programa P expresso em uma linguagem S, usando um interpretador para S executando na máquina M

P

S

M

Page 25: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Interpretadores: Exemplos

chess

Lisp

Basic

x86

graph

Basic

x86

chess

Lisp

Lisp

x86

x86

Basic

x86

x86

Page 26: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Máquina Real x Abstrata

• Projeto de uma nova máquina “Ultima”

• Para testes: usar um interpretador (emulador)

C

M

M

M

Ultima

C

Ultima

M

Page 27: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Máquina Real x Abstrata

P

Ultima

Ultima

M

M

P

Ultima

Ultima

Page 28: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Interpretive Compiler

• Combina características de interpretadores e compiladores.

• Compila para uma linguagem intermediária, e interpreta esta linguagem.

• Linguagem intermediária: simples e rápido de traduzir para ela, e simples e rápida de interpretar.

• Exemplo: Java, no JDK

Page 29: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

O JDK

Java

M

JVM

M

Java

M

JVM

JVM

M

P

JVM

M

JVM

M

P

Java

P

JVM

Page 30: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

M

Compiladores Portáveis

Java

Java

JVM JVM

C

Java

JVM

JVM

JVM

C C

M

M

JVM

M

programa fonte do compilador

programa fonte do interpretador JVM,

escrito em C

compilador expresso em

JVM

compilando o interpretador:

javac

Page 31: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Compiladores Portáveis

M

Java

JVM

JVM

P

Java

P

JVM

JVM

M

JVM

M

P

JVM

M

compilando programas e usando o interpretador portável

Page 32: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrapping um compilador interpretador

M

Java

JVM

JVM

JVM

M

JVM

Java

M JVM

Java

M JVM

JVM

M

Page 33: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrapping um compilador interpretador (2)

M

JVM

JVM

M

JVM

M

JVM

M

MJVM

JVM

M

Compilador compila a si

mesmo

Page 34: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrapping um compilador interpretador (3)

M

JVM

M

M

Java

M

JVMJava

JVM

JVM

Page 35: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrapping um compilador interpretador (4)

M

JVM

M

M

M

Java

M

JVM

P

Java

P

JVM

P

M

Page 36: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrap completo: versão 1

M

C

M

M

Ada-S

C

M

Ada-S

C

M Ada-S

M

M

Page 37: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrap completo: versão 2

M

Ada-S

Ada-S

M

Ada-S

M

MAda-S

Ada-S

M

Inicia desenvolviment

o do novo compilador

Inicia desenvolviment

o do novo compilador

Compilador antigo

Compilador novo

Ada-S

M

M

Page 38: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrap completo: versão 2a

M

Ada-S

Ada-S

M

Ada-S

M

MAda-S

Ada-S

M

Inicia desenvolviment

o do novo compilador

Inicia desenvolviment

o do novo compilador

Compilador novo

Compilador novo

Ada-S

M

M

Page 39: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrap completo: versão 3

M

Ada

Ada-S

M

Ada

Ada-S

M Ada

M

M

M

MAda-S M

Linguagem estendida

Page 40: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrap como estratégia para melhorar eficiência

Ada

Ada

Mslow Ada

Mslow

Mslow

Ada

Ada

Mfast

programa fonte do compilador, que gera código

ineficiente

executável ineficiente do

compilador, que também gera código

ineficientemelhoria no

programa fonte do compilador,

para gerar código mais eficiente

Page 41: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrap como estratégia para melhorar eficiência

Ada

Mslow

Mfast

Ada

Mslow

Mslow

Ada

Ada

Mfast

M

Page 42: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrap como estratégia para melhorar eficiência

Ada

Mslow

Mfast

M

P

Ada

P

Mfast

M

P

Mfast

Page 43: Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Bootstrap como estratégia para melhorar eficiência

Ada

Mslow

Mfast

M

Ada

Ada

Mfast Ada

Mfast

Mfast