Processadores de Linguagens 1.Tradutores e interpretadores 2.Bootstrapping

Preview:

Citation preview

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

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.

Outros tipos de tradutores

• Tradutores entre linguagens de alto nível.

• Disassembler

• De(s)compilador

Linguagens

• Linguagem fonte

• Linguagem destino

• Linguagem de implementação

Diagramas: Programas

• Programa P expresso na linguagem L

P

L

graph

Basic

sort

x86

sort

Java

Diagramas: Máquinas

• Máquina M

M

SPARCPPCx86

Diagrama: execução

• Rodando programa P na máquina M

P

M

M

sort

PPC

PPC

sort

PPC

x86

sort

Java

x86

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

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

Tradução: Exemplo

sort

Java

sort

x86Java

x86

x86

x86

sort

x86

x86

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.

Cross-compiler

sort

Java

sort

PPCJava

x86

PPC

x86

sort

PPC

PPC

Interações ilegais

sort

Java C

x86

x86

x86

sort

Java Java

x86

x86

PPC

Compilação em dois estágios

sort

Java

sort

CJava

x86

C

x86

C

x86

x86

x86

sort

x86

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

Compilando um compilador

C

x86

x86

x86

Java

C

x86 Java

x86

x86

Compiladores

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

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

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.

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.

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.

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

Representação de um interpretador

S

L

• Interpretador de S expresso na linguagem L

SQL

x86

shell

C

shell

SPARC

Basic

x86

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

Interpretadores: Exemplos

chess

Lisp

Basic

x86

graph

Basic

x86

chess

Lisp

Lisp

x86

x86

Basic

x86

x86

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

Máquina Real x Abstrata

P

Ultima

Ultima

M

M

P

Ultima

Ultima

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

O JDK

Java

M

JVM

M

Java

M

JVM

JVM

M

P

JVM

M

JVM

M

P

Java

P

JVM

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

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

Bootstrapping um compilador interpretador

M

Java

JVM

JVM

JVM

M

JVM

Java

M JVM

Java

M JVM

JVM

M

Bootstrapping um compilador interpretador (2)

M

JVM

JVM

M

JVM

M

JVM

M

MJVM

JVM

M

Compilador compila a si

mesmo

Bootstrapping um compilador interpretador (3)

M

JVM

M

M

Java

M

JVMJava

JVM

JVM

Bootstrapping um compilador interpretador (4)

M

JVM

M

M

M

Java

M

JVM

P

Java

P

JVM

P

M

Bootstrap completo: versão 1

M

C

M

M

Ada-S

C

M

Ada-S

C

M Ada-S

M

M

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

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

Bootstrap completo: versão 3

M

Ada

Ada-S

M

Ada

Ada-S

M Ada

M

M

M

MAda-S M

Linguagem estendida

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

Bootstrap como estratégia para melhorar eficiência

Ada

Mslow

Mfast

Ada

Mslow

Mslow

Ada

Ada

Mfast

M

Bootstrap como estratégia para melhorar eficiência

Ada

Mslow

Mfast

M

P

Ada

P

Mfast

M

P

Mfast

Bootstrap como estratégia para melhorar eficiência

Ada

Mslow

Mfast

M

Ada

Ada

Mfast Ada

Mfast

Mfast