Processadores de Linguagens 1 Tradutores e interpretadores 2











































- Slides: 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. – 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 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 sort graph Java x 86 Basic
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 M PPC x 86
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 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
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
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 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
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 • 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 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
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
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
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 usando o interpretador portável
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 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
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 novo Ada-S M M Compilador antigo
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 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 P Ada Mfast Mslow M P P Mfast M
Bootstrap como estratégia para melhorar eficiência Ada Mfast Mslow M Mfast





