Processadores de Linguagens 1 Tradutores e interpretadores 2

  • Slides: 43
Download presentation
Processadores de Linguagens 1. Tradutores e interpretadores 2. Bootstrapping

Processadores de Linguagens 1. Tradutores e interpretadores 2. Bootstrapping

Tradutores e Compiladores • Tradutores recebem um texto expresso em uma linguagem fonte e

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 x 86 – x 86 assembler

Assembler x Compilador • Um assembler traduz de uma linguagem de montagem para o

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 •

Outros tipos de tradutores • Tradutores entre linguagens de alto nível. • Disassembler • De(s)compilador

Linguagens • Linguagem fonte • Linguagem destino • Linguagem de implementação

Linguagens • Linguagem fonte • Linguagem destino • Linguagem de implementação

Diagramas: Programas • Programa P expresso na linguagem L P L sort graph Java

Diagramas: Programas • Programa P expresso na linguagem L P L sort graph Java x 86 Basic

Diagramas: Máquinas • Máquina M M x 86 PPC SPARC

Diagramas: Máquinas • Máquina M M x 86 PPC SPARC

Diagrama: execução • Rodando programa P na máquina M P sort M PPC Java

Diagrama: execução • Rodando programa P na máquina M P sort M PPC Java M PPC x 86

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

Diagrama: tradutores • Tradutor de S para T expresso na linguagem L S T L Java x 86 C x 86 Java C C++ x 86 ass. x 86

Diagrama: tradução • Tradução de um programa fonte P expresso na linguagem S em

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 P S S T M M T

Tradução: Exemplo sort Java x 86 x 86

Tradução: Exemplo sort Java x 86 x 86

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

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 PPC PPC x 86 PPC

Cross-compiler sort Java PPC PPC x 86 PPC

Interações ilegais sort Java sort C x 86 Java x 86 PPC

Interações ilegais sort Java sort C x 86 Java x 86 PPC

Compilação em dois estágios sort Java C C sort C x 86 x 86

Compilação em dois estágios sort Java C C sort C x 86 x 86

Compilação em N estágios sort C C C sort x 86 C ASM ASM

Compilação em N estágios sort C C C sort x 86 C ASM ASM x 86 x 86 C preprocessor C compile r Assembler

Compilando um compilador Java x 86 C x 86

Compilando um compilador Java x 86 C x 86

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

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

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

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

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

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 • Interpretador de S expresso na linguagem L S Basic

Representação de um interpretador • Interpretador de S expresso na linguagem L S Basic SQL shell L x 86 C SPARC

Representação de um interpretador • Interpretação de um programa P expresso em uma linguagem

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

Interpretadores: Exemplos graph chess Basic Lisp x 86 x 86 Basic

Interpretadores: Exemplos graph chess Basic Lisp x 86 x 86 Basic

Máquina Real x Abstrata • Projeto de uma nova máquina “Ultima” • Para testes:

Máquina Real x Abstrata • Projeto de uma nova máquina “Ultima” • Para testes: usar um interpretador (emulador) Ultima C M M

Máquina Real x Abstrata P Ultima M M P Ultima

Máquina Real x Abstrata P Ultima M M P Ultima

Interpretive Compiler • Combina características de interpretadores e compiladores. • Compila para uma linguagem

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 JVM M M P P P Java JVM JVM M M

O JDK Java JVM M M P P P Java JVM JVM M M

Compiladores Portáveis compilador expresso em JVM programa fonte do compilador Java JVM javac Java

Compiladores Portáveis compilador expresso em JVM programa fonte do compilador Java JVM javac Java JVM JVM C JVM compilando o interpretador: C programa fonte do interpretador JVM, escrito em C JVM C M M

Compiladores Portáveis P P P Java JVM JVM JVM M M compilando programas e

Compiladores Portáveis P P P Java JVM JVM JVM M M compilando programas e usando o interpretador portável

Bootstrapping um compilador interpretador JVM M Java JVM JVM M M

Bootstrapping um compilador interpretador JVM M Java JVM JVM M M

Bootstrapping um compilador interpretador (2) JVM M JVM Compilador compila a si mesmo JVM

Bootstrapping um compilador interpretador (2) JVM M JVM Compilador compila a si mesmo JVM M

Bootstrapping um compilador interpretador (3) Java JVM JVM M M

Bootstrapping um compilador interpretador (3) Java JVM JVM M M

Bootstrapping um compilador interpretador (4) P P P Java JVM JVM M M M

Bootstrapping um compilador interpretador (4) P P P Java JVM JVM M M M

Bootstrap completo: versão 1 Ada-S M C M M

Bootstrap completo: versão 1 Ada-S M C M M

Bootstrap completo: versão 2 Inicia desenvolviment o do novo compilador Ada-S M Ada-S Compilador

Bootstrap completo: versão 2 Inicia desenvolviment o do novo compilador Ada-S M Ada-S Compilador novo Ada-S M M Compilador antigo

Bootstrap completo: versão 2 a Inicia desenvolviment o do novo compilador Ada-S M Ada-S

Bootstrap completo: versão 2 a Inicia desenvolviment o do novo compilador Ada-S M Ada-S Compilador novo Ada-S M M Compilador novo

Bootstrap completo: versão 3 Linguagem estendida Ada M Ada-S MM M

Bootstrap completo: versão 3 Linguagem estendida Ada M Ada-S MM M

Bootstrap como estratégia para melhorar eficiência Ada Mslow Ada Mslow programa fonte do compilador,

Bootstrap como estratégia para melhorar eficiência Ada Mslow Ada Mslow programa fonte do compilador, que gera código ineficiente melhoria no programa fonte do compilador, para gerar código mais eficiente executável ineficiente do compilador, que também gera código ineficiente Ada Mfast Ada

Bootstrap como estratégia para melhorar eficiência Ada Mfast Ada Mslow M Mslow

Bootstrap como estratégia para melhorar eficiência Ada Mfast Ada Mslow M Mslow

Bootstrap como estratégia para melhorar eficiência P Ada Mfast Mslow M P P Mfast

Bootstrap como estratégia para melhorar eficiência P Ada Mfast Mslow M P P Mfast M

Bootstrap como estratégia para melhorar eficiência Ada Mfast Mslow M Mfast

Bootstrap como estratégia para melhorar eficiência Ada Mfast Mslow M Mfast