1 / 29

Introdução a Compiladores

Introdução a Compiladores. Visão Macro Cláudio, Ibraim, Robson, Rafael. O PROBLEMA: IMPLEMENTAR linguagens de ALTO NÍVEL em um computador cuja linguagem de máquina é de NÍVEL MUITO MAIS BAIXO. A SOLUÇÃO: TRADUZIR essas LINGUAGENS usando a própria LINGUAGEM DE MÁQUINA DA CPU. TRADUTOR.

becky
Download Presentation

Introdução a Compiladores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introdução a Compiladores Visão Macro Cláudio, Ibraim, Robson, Rafael

  2. O PROBLEMA: IMPLEMENTAR linguagens de ALTO NÍVEL em um computador cuja linguagem de máquina é de NÍVEL MUITO MAIS BAIXO. A SOLUÇÃO:TRADUZIR essas LINGUAGENS usando a própria LINGUAGEM DE MÁQUINA DA CPU.

  3. TRADUTOR É um programa que traduz um programa fonte escrito em uma linguagem qualquer (linguagem fonte) para um programa objeto equivalente escrito em outra linguagem (linguagem objeto) Linguagem Fonte Linguagem Objeto Tradutor

  4. COMPILADOR É um Tradutor em que a linguagem fonte é uma linguagem de alto nível e a linguagem objeto é uma linguagem de baixo nível (assembly ou máquina) Linguagem Objeto(assembly ou máquina) Linguagem Fonte (Alto Nível) Compilador

  5. Programa Fonte Compilador Análise Análise Léxica Análise Sintática Análise Semântica Síntese Geração de Código Intermediário Otimização de Código Geração de Código Programa Objeto

  6. DESCOMPILADOR É um programa que realiza a OPERAÇÃO INVERSA do COMPILADOR, ou seja, da LINGUAGEM OBJETO ele EXTRAI a LINGUAGEM FONTE. Linguagem Objeto(assembly ou máquina) Linguagem Fonte (Alto Nível) Descompilador

  7. INTERPRETADOR • Processa o código fonte, analisando um comando a cada vez que esse deve ser executado. • Processamento é feito junto os dados de entrada, em tempo de execução. • Não produz um programa objeto.

  8. 2 Determinar a ação a ser executada. Buscar os dados necessários. 1 Obter o próximo comando a ser executado. 3 Executar a ação. Tratar o resultado.

  9. INTERPRETADOR Programa Fonte Interpretador Saída Dados Interpretação pura

  10. MONTADOR (assembler) • É um tradutor que mapeia instruções em linguagem simbólica (assembly) para instruções de linguagem de máquina. • Geralmente os comandos seguem a relação 1:1.

  11. MONTADOR (assembler) • Alguns compiladores produzem esse trabalho diretamente. Montador Linguagem de máquina Linguagem simbólica

  12. Jasmin (Java Assembler Interface) • Montador de assembly JVM para arquivos class. • Recebe um arquivo texto como entrada. Jasmin Linguagem simbólica .class

  13. DESMONTADOR (dissassembler) • Um desmontador é um programa que converte código de máquina em código de montagem (assembly). • Constantes simbólicas, comentários e rótulos de endereçamento não são recuperados.

  14. MÁQUINA VIRTUAL • Uma máquina virtual é um computador fictício criado por um programa de simulação. Estes programas podem simular um computador de arquitetura diferente. • Um bom exemplo para maquina virtual no contexto de compiladores e a JVM

  15. COMPILADOR HÍBRIDO • Um compilador é um programa que, a partir de um código escrito em uma linguagem cria um programa semanticamente equivalente, porém escrito em outra linguagem. • Um compilador hibrido tem o papel de converter o código fonte em um código chamado de bytecode, que é uma linguagem de baixo nível.

  16. COMPILADOR HÍBRIDO • O bytecode irá ser interpretado numa máquina virtual, que fará a execução. O • bytecode é um estágio intermédio entre o código-fonte e a aplicação final.

  17. CARREGADOR • O carregador coleta os programas traduzidos separadamente e liga-os em um único módulo e depois carrega o modulo absoluto na memória principal, substituindo os endereços relativos ao módulo de carga por endereços reais de memória.

  18. ______________________________ Interpretador O interpretador lê os bytecodes e executa o programa memória O programa é criado em um editor e armazenado no disco Editor disco disco disco Compilador gera os bytecodes e os armazena no disco Compilador ______________________________ O carregador de classes coloca os bytecodes na memória Carregador de classes memória O verificador de bytecodes confirma se todos os bytecodes estão corretos e se não violam as restrições de segurança da linguagem Java ______________________________ Verificador de bytecodes memória Processo de Execução

  19. COMPILER-TO-COMPILER • São softwares capaz de gerar através de outras linguagens de alto nível outros compiladores • Exemplo o JavaCC, que passo o código fonte para Java e depois segue o fluxo normal de um programa na plataforma.

  20. EXTENSÕES DE ARQUIVOS • Arquivos .java • Arquivos utilizado na construção de programas na linguagem java. • Arquivos .class • Arquivos pré-compilados • Arquivos a serem interpretados pela JVM • Arquivos .jj • Geração de novas linguagens. • Arquivos .j • Similar a assembly.

  21. Linguagem fonte, Intermediária e Destino. • Fonte • Linguagem de fácil interpretação para um programador. • Linguagem não compilada. • Intermediária • Linguagem pré-compilada • Bytecode • Interpretada pela Máquina Virtual • Linguagem destino • Geralmente linguagem de máquina.

  22. Exemplos de arquivos 1/6 • Extensão .java public class Exemplo01 {   public static void main(String args[]) {      double a,b;      a = 40 + 30;      b = a + 20;   }}

  23. Exemplos de arquivos 2/6 • Extensão .jj /*  Analex.jj - Analisador Léxico */ options { JDK_VERSION = "1.5"; DEBUG_PARSER = false; DEBUG_TOKEN_MANAGER = false; } PARSER_BEGIN(Analex) import java.io.*; publicclass Analex { publicstaticvoid main(String args[])  throws ParseException  { try {          Analex x = new Analex(new FileInputStream(args[0]));          x.S();       } catch(FileNotFoundException e) { System.out.println("Arquivo não encontrado");       }    } }

  24. Exemplos de arquivos 3/6 PARSER_END(Analex) SKIP : { " " | "\t" | "\r" | "\n" } SKIP : {    "/*" : comentario } <comentario> SKIP: {    "*/" : DEFAULT |    <~[]> } TOKEN [IGNORE_CASE] : {   < BREAK: "break" > }  TOKEN : {   < IDENT: "_"(["a"-"z","A"-"Z","_","0"-"9"] )* > | < INT:  (["0"-"9"])+("L"|"l")? > }

  25. Exemplos de arquivos 4/6 TOKEN: {   < VOGAIS: (["a","e","i","o","u"]){3} > |   < ARQ:    "\""             ((~[".", ":", ";", "\\"]) {1,8}             ( "." (~[".", ":", ";", "\\"]){1,3})?)             "\"" > } JAVACODEvoid S() {    Token t; do {       t = getNextToken();       System.out.println(tokenImage[t.kind]+"\t"+t.image);    } while(t.kind != EOF); }

  26. Exemplos de arquivos 5/6 • Arquivo fonte:   a := XIX + IV + II;   b := XXXVIII;  soma := a + b;  exibe soma; • Arquivo '.j'    .source prog_destino.java  .class public prog_destino  .super java/lang/Object  .method public <init>()V  .limit stack 1  .limit locals 1  aload_0  invokespecial java/lang/Object/<init>()V  return  .end method

  27. Exemplos de arquivos 6/6 .method public static main([Ljava/lang/String;)V  .limit stack 4  .limit locals 100  ldc2_w 19.0  ldc2_w 4.0  dadd  ldc2_w 2.0  dadd  dstore 1  ldc2_w 38.0  dstore 3  dload 1  dload 3  dadd  dstore 5  getstatic java/lang/System/out Ljava/io/PrintStream;  dload 5  invokevirtual java/io/PrintStream/println(D)V  return  .end method • Execução: 63.0

More Related