Processadores de Linguagens

Slides:



Advertisements
Apresentações semelhantes
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Advertisements

Introdução à Ciência da Computação Linguagens de Programação.
Arquitetura e organização de computadores.
Linguagem de Montagem Visão geral.
Paradigmas de Programação
Seminários de Compiladores
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
ARQUITETURAS RISC E CISC
Introdução a Programação Renata Freire
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Introdução a Informática
CISC e RISC.
INTRODUÇÃO À PROGRAMAÇÃO
Professor: Erivelto Tschoeke – UDESC/CEPLAN
Ferramentas Programação
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Tradutores de Linguagens
Linguagens de Programação
Prof. Msc. Raul Paradeda Aula 2 Introdução
Introdução a Linguagem de Programação C
Lógica de Programação UNIDADE 1 – Introdução a) Computador
Sejam bem vindos! Arquitetura de Sistemas Operacionais.
PROGRAMAÇÃO I UNIDADE 1.
Aula prática – geração de código (.NET)
Representação de Instruções
JAVA Linguagem Ambiente de Desenvolvimento
Linguagem de programação I A
Aula 1 - Introdução ao C Ameliara Freire.
Linguagens de programação
Interpretador Python.
Programação de SCRIPTS
Laboratório I Mateus Raeder Material baseado nos originais da
Teoria e Implementação de Linguagens Computacionais
Teoria e Implementação de Linguagens Computacionais – IF688
Avaliação da Linguagem de Programação
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Cristiano Soares Rafael di Lego Roberto Nemirovsky Thiago Nascimento
Java Bytecode Software Básico Mitsuo Takaki.
Professor: Márcio Amador
02/08/2011 Professor Leomir J. Borba- –
Geração de Código Intermediário
Geração de Código aula-12-geração-de-código.pdf.
Execução de programas Cap. VIII.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Projeto de Linguagens de Programação
Sistemas da informação para processos produtivos Softwares e programação.
Arquiteturas RISC x CISC
Aula 1 – Profª Danielle Costa
Back-End Compilação aula-11-back-end.pdf.
Linguagens de Programação Introdução Prof. Renato Melo.
Algoritmos e Programação I
Fundamentos de linguagens de programação
Compiladores – IF688 Professor: André Santos
Java Disciplina: Programação II Professora: Mai-Ly Vanessa.
Linguagem técnica de programação I Java
Igor Steinmacher, MSc. Java!!!!
Linguagens de Programação
SISTEMAS DE INFORMAÇÃO
Introdução a linguagem de Programação Java. Linguagens de Programação Linguagens de máquina(muito difíceis de usar e compreender) – Comanda ações do computador.
2.
Introdução à lógica de programação
Teoria e Implementação de Linguagens Computacionais Revisão 1º EE André Ricardo Schäffer Lopes – Rodrigo Diego Melo Amorim–
Influencias sobre o Projeto da Linguagem
LÓGICA DE PROGRAMAÇÃO Curso: Técnico em Informática Professor: Ronaldo Disciplina: Lógica de Programação.
Módulo I – Softwares: Linguagens de Programação Prof.: Rogério Morais.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
 Processamento de dados: requer a execução de uma série de passos, o programa (software)  Cada passo é uma instrução, ou ordem de comando, dada ao.
 Evolução constante das linguagens de programação de alto nível (LAN) desde o Fortran (primeira LAN)  Surgimento de novos paradigmas como a OO, Orientação.
Sistemas de Informações Fundamentos da Computação 3. Software Márcio Aurélio Ribeiro Moreira
Transcrição da apresentação:

Processadores de Linguagens Tradutores e interpretadores 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 sort Java graph Basic

Diagramas: Máquinas Máquina M M x86 PPC SPARC

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

Diagrama: tradutores Tradutor de S para T expresso na linguagem L S L  Java C x86  Java x86  Java C++ C  x86 ass. 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 T S M T  M

Tradução: Exemplo sort Java sort x86 sort x86 Java x86  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 PPC sort PPC Java x86 PPC  PPC x86

Interações ilegais sort Java sort Java C x86   Java x86   x86 PPC

Compilação em dois estágios sort Java sort C sort x86 Java x86 C  C x86  x86 x86

Compilação em N estágios sort x86 sort C sort C sort ASM C x86  ASM  x86 C  ASM x86 x86 x86 x86 x86 C preprocessor C compiler Assembler

Compilando um compilador Java C x86  Java x86  C 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 Interpretador de S expresso na linguagem L S L Basic x86 SQL x86 shell C shell 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 Basic chess Lisp chess Lisp  Basic x86 Lisp x86 Basic x86 x86 x86 x86

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

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

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

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

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

Bootstrapping um compilador interpretador JVM Java M  JVM Java M  JVM M  Java JVM  JVM M M

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

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

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

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

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

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

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

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

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

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

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