Вы находитесь на странице: 1из 43

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.
Chins para ingls Java para C Java para x86 x86 assembler

Assembler x Compilador
Um assembler traduz de uma linguagem de montagem para o cdigo de mquina correspondente. Uma instruo de mquina para cada instruo em assembly language. Um compilador traduz de uma linguagem de alto nvel para uma linguagem de baixo nvel. Vrias instrues de mquina para cada linha de comando da linguagem de alto-nvel.

Outros tipos de tradutores


Tradutores entre linguagens de alto nvel. Disassembler De(s)compilador

Linguagens
Linguagem fonte Linguagem destino Linguagem de implementao

Diagramas: Programas
Programa P expresso na linguagem L
P L

sort
Java

sort
x86

graph
Basic

Diagramas: Mquinas
Mquina M
M

x86

PPC

SPARC

Diagrama: execuo
Rodando programa P na mquina M
P M sort PPC sort PPC sort Java

PPC

x86

x86

Diagrama: tradutores
Tradutor de S para T expresso na linguagem L
ST L

Java x86
C

Java x86
x86

Java C
C++

x86 ass. x86


x86

Diagrama: traduo
Traduo 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 mquina M P P
S ST M M T

Traduo: Exemplo
sort Java Java x86 x86 x86 sort x86 sort

x86
x86

Cross-compiler
Roda em uma mquina hospedeira, mas gera cdigo para outra mquina. Usado quando a mquina destino tem pouca memria, no tem compilador ou outras ferramentas.

Cross-compiler
sort sort sort

Java Java PPC PPC x86 x86

PPC
PPC

Interaes ilegais
sort Java sort C x86 x86 x86

Java Java x86

PPC

x86

Compilao em dois estgios


sort Java Java C x86 x86 sort C C x86 x86 x86 sort x86

Compilao em N estgios
sort C CC sort C sort sort

x86 C ASM ASM ASM x86 x86 x86 x86 x86

x86
x86 C preprocesso r

C compile r

Assemble r

Compilando um compilador
Java x86 C Java x86 C x86 x86 x86 x86

Compiladores
Permitem execuo dos programas com mxima performance, em linguagem de mquina. Entretanto existe o tempo de espera pela compilao.

Interpretadores
Recebem um programa fonte escrito em uma linguagem fonte, e o executam imediatamente. L, analisa e executa as instrues do programa fonte, uma de cada vez. Resultados imediatos, sem a traduo do programa para cdigo objeto antes da execuo.

Uso de Interpretadores
Programador trabalha em modo interativo, e quer ver o resultado de uma instruo antes de entrar a prxima; Programas descartveis, em que velocidade de execuo no to importante; Execuo de instrues apenas um vez, ou raramente; Formato de instrues simples, podendo ser analisada fcil e eficientemente.

Uso de Interpretadores
Execuo (de linguagem de alto nvel) at 100 vezes mais lenta que a verso compilada; Inadequado quando o programa vai ser executado em produo, ou executado frequentemente, ou instrues tem formato complicado, difcil de ser analisado.

Exemplos de Interpretadores
Basic: expresses e atribuies de alto nvel, mas estruturas de controle de baixo nvel (desvio condicional/incondicional); Lisp: estrutura de rvore para cdigo e dados, podendo gerar cdigo em tempo de execuo; Shell do Unix e do DOS Interpretador SQL

Representao de um interpretador
Interpretador de S expresso na linguagem L
S L Basic x86 SQL x86 shell C shell SPARC

Representao de um interpretador
Interpretao de um programa P expresso em uma linguagem S, usando um interpretador para S executando na mquina M
P S S M M

Interpretadores: Exemplos
graph Basic Basic x86 x86 chess Lisp Lisp x86 x86 chess

Basic
x86 x86

Lisp

Mquina Real x Abstrata


Projeto de uma nova mquina Ultima Para testes: usar um interpretador (emulador)
Ultima C CM Ultima M

M M

Mquina Real x Abstrata


P Ultima Ultima M M

P Ultima Ultima

Interpretive Compiler
Combina caractersticas de interpretadores e compiladores. Compila para uma linguagem intermediria, e interpreta esta linguagem. Linguagem intermediria: simples e rpido de traduzir para ela, e simples e rpida de interpretar. Exemplo: Java, no JDK

O JDK
Java JVM M JVM M P

P
JVM JVM M M

Java Java JVM JVM

M M

Compiladores Portveis
programa fonte do compilador compilador expresso em JVM javac programa fonte do interpretador JVM, escrito em C

Java JVM Java

Java JVM

JVM

JVM
JVM JVM

compilando o interpretador:

CM
M M

Compiladores Portveis
P P P JVM JVM M M

Java Java JVM JVM

JVM
JVM M

M
compilando programas e usando o interpretador portvel

Bootstrapping um compilador interpretador


JVM M JVM M JVM M

Java

Java Java JVM JVM


JVM JVM M M

Bootstrapping um compilador interpretador (2)


JVM M JVM M M JVM JVM M JVM JVM Compilador compila a si mesmo

M M

Bootstrapping um compilador interpretador (3)


Java JVM
JVM

Java JVM
M

JVM M M M

Bootstrapping um compilador interpretador (4)


P P P

Java Java JVM JVM JVM M


M M M M

Bootstrap completo: verso 1


Ada-S M
C

Ada-S M C

Ada-S M CM M M M

Bootstrap completo: verso 2


Inicia desenvolviment o do novo compilador Ada-S M Ada-S Ada-S M M M Compilador antigo

Ada-S M
Ada-S

Compilador novo

Ada-S M M

Bootstrap completo: verso 2a


Inicia desenvolviment o do novo compilador Ada-S M Ada-S Ada-S M M M Compilador novo

Ada-S M
Ada-S

Compilador novo

Ada-S M M

Bootstrap completo: verso 3


Linguagem estendida

Ada M
Ada-S

Ada M
Ada-S Ada-S M M M M

Ada M
M

Bootstrap como estratgia para melhorar eficincia


Ada Mslow Ada
programa fonte do compilador, que gera cdigo ineficiente

Ada Mslow Mslow


executvel ineficiente do compilador, que tambm gera cdigo ineficiente

melhoria no programa fonte do compilador, para gerar cdigo mais eficiente

Ada Mfast Ada

Bootstrap como estratgia para melhorar eficincia

Ada Mfast Ada Ada Mslow

Ada Mfast Mslow

Mslow
M

Bootstrap como estratgia para melhorar eficincia


P P P

Ada

Ada Mfast
Mslow M

Mfast

Mfast
M

Bootstrap como estratgia para melhorar eficincia


Ada Mfast Ada Ada Mfast Mslow M Ada Mfast Mfast