Click here to load reader

Compiladores Prof. Yandre Maldonado Compiladores - Prof. Yandre - 1

  • View
    123

  • Download
    5

Embed Size (px)

Text of Compiladores Prof. Yandre Maldonado Compiladores - Prof. Yandre - 1

  • Slide 1
  • Compiladores Prof. Yandre Maldonado Compiladores - Prof. Yandre - 1
  • Slide 2
  • Compiladores - Prof. Yandre - 2
  • Slide 3
  • Introduo Compilador um programa que traduz o cdigo fonte escrito em uma linguagem de mais alto nvel para outra linguagem de mais baixo nvel; a linguagem original chamada de linguagem fonte, e a linguagem final chamada de linguagem destino ou alvo; Compiladores - Prof. Yandre - 3 Programa Linguagem Fonte Compilador Programa Linguagem Alvo Mensagens de Erro
  • Slide 4
  • Introduo VARIEDADE DE COMPILADORES Compiladores - Prof. Yandre - 4 Linguagem Fonte Fortran C Pascal Modula Algol... Mquina Alvo Intel Mips Sparc... A mquina alvo pode estar entre um microprocessador e um supercomputador
  • Slide 5
  • A anlise cria um representao intermediria do cdigo Introduo Estrutura Geral de um Compilador (Modelo de compilao de Anlise e Sntese) Compiladores - Prof. Yandre - 5 Anlise Lxica Anlise Sinttica 1. Anlise 2. Sntese Anlise Estrutural Anlise Semntica Gerao de Cdigo Intermedirio Otimizao de Cdigo Gerao de Cdigo Alvo Gera o cdigo a partir da representao intermediria
  • Slide 6
  • Introduo A interao entre os mdulos do compilador Tratamento de Erros Gerao de Cdigo Intermedirio Otimizao Cdigo Alvo Sntese Lxica Sinttica Semntica Anlise Programa Fonte Programa Alvo Compiladores - Prof. Yandre - 6
  • Slide 7
  • Introduo Conceitos acerca da compilao: Tradutor: programa que transforma um programa fonte escrito numa linguagem em um programa equivalente escrito em uma linguagem diferente; Pr-processador: programa que transforma um programa escrito em uma linguagem estendida em um programa equivalente escrito em linguagem original; Compiladores - Prof. Yandre - 7 Prog. Linguagem A Prog. Linguagem B Tradutor Prog. Linguagem Estendida Prog. Linguagem Original Pr- processador Compilador
  • Slide 8
  • Introduo Montador: tradutor que transforma um programa escrito em uma linguagem simblica (de baixo nvel) em instrues equivalentes em linguagem de mquina; Compiladores - Prof. Yandre - 8 Prog. Linguagem Simblica Instrues em Linguagem de Mquina Montador Alto nvel Simblica Instrues em Ling. de Mquina b := a+2; MOV a, R1 ADD #2, R1 MOV R1, b MOV a, R1 ADD #2, R1 MOV R1, b 0001010000000000 0011011000000010 0010010000000100 0001010000000000 0011011000000010 0010010000000100 Compilao Montagem 1xn 1x1
  • Slide 9
  • Introduo Interpretador: tradutor que funciona em tempo de execuo. Estes programas traduzem programas codificados em linguagem de alto nvel para um cdigo intermedirio e o coloca em execuo. Exemplos: o run do Pascal ou C; Java: sitemas distribudos, diferentes equipamentos; (bytecode) Cerca de 10 vezes mais lento que um cdigo compilado C++; Pode ser interpretado em plataformas diferentes; Compiladores - Prof. Yandre - 9 Programa Fonte Cdigo Intermedirio em Execuo Interpretador
  • Slide 10
  • Introduo Hierarquia: Compiladores - Prof. Yandre - 10 TRADUTORES INTERPRETADORES PR- PROCESSADORES COMPILADORES MONTADORES
  • Slide 11
  • Regras de Produo id := | if then | if then else | while do | begin end. | + termo | - termo | termo Compiladores - Prof. Yandre - 11
  • Slide 12
  • Anlise Lxica Realizada pelo Analisador Lxico ou SCANNER; Identifica no arquivo fonte os smbolos pertencentes linguagem; Compiladores - Prof. Yandre - 12 Fluxo de Caracteres de Entrada (Prog. Fonte) Analisador Lxico Fluxo de Tokens
  • Slide 13
  • Anlise Lxica Tarefas do Analisador Lxico: Percorrer o programa fonte (arquivo texto), passando por cada um de seus caracteres; Formar itens lxicos a partir dos caracteres consecutivos, que podem ser de vrios tipos: palavras reservadas; identificadores; constantes numricas; smbolos especiais. Compiladores - Prof. Yandre - 13
  • Slide 14
  • Anlise Lxica Atribuir um cdigo numrico (token) a cada um dos itens lxicos encontrados; Ignorar espaos em branco e comentrios; Detectar erros lxicos: caracteres invlidos. Exemplo: a:=2#3; tamanho dos identificadores; Compiladores - Prof. Yandre - 14
  • Slide 15
  • Anlise Lxica Exemplo: anlise lxica do seguinte programa em Pascal. Identificar: Token, tem lxico, tipo. Compiladores - Prof. Yandre - 15 program exemplo; var A, B: real; begin A:=B+0.5; end.
  • Slide 16
  • Tabela de Smbolos uma estrutura de dados com algoritmos apropriados para a manipulao de seus dados (listas, rvores, arranjos,...); Guarda informaes sobre os identificadores: Nome Endereo Tipo Compiladores - Prof. Yandre - 16
  • Slide 17
  • Tabela de Smbolos Uma tabela de smbolos possui um registro para cada identificador; A estrutura de dados que manipula esta tabela deve permitir rpido armazenamento ou recuperao dos dados. Compiladores - Prof. Yandre - 17
  • Slide 18
  • Anlise Sinttica Executada pelo PARSER (Analisador Sinttico); Procura agrupar os TOKENS obtidos pelo SCANNER em estruturas sintticas (declaraes, comandos, corpo do programa, blocos, lista de identificadores, programa,...) verificando a sintaxe da linguagem; Compiladores - Prof. Yandre - 18
  • Slide 19
  • Anlise Sinttica Program Exemplo; Var A, B: byte; begin A := B + 0,5; end. Compiladores - Prof. Yandre - 19 Lista Ident. Declarao Comando Expresso Cabealho Corpo Prog. Bloco Programa
  • Slide 20
  • Anlise Sinttica As regras gramaticais que definem as construes da linguagem podem ser descritas atravs de produes, cujos elementos incluem smbolos terminais (que fazem parte do cdigo fonte) e smbolos no-terminais (que geram outras regras); As seguintes regras definem o comando WHILE, da linguagem Pascal, nas quais as palavras em maisculo representam terminais e as palavras em minsculo os no-terminais: comando comandoWhile | comandoIf | comandoAtrib, |... comandoWhile WHILE expr_bool DO comando; expr_bool expr_arit < expr_arit | expr_arit > expr_arit |... expr_arit expr_arit * termo | termo |... termo expr_arit | NMERO | IDENTIFICADOR Compiladores - Prof. Yandre - 20
  • Slide 21
  • Anlise Semntica Funes: Verificar se o significado das construes sintticas possibilitam a gerao de cdigo; Extrair informaes do programa fonte que possibilitem a gerao de cdigo; Por exemplo, o seguinte comando IF, sintaticamente correto, pode existir em um programa: if a>7 then b:=5 else b:=10; Depende dos tipos das variaveis a e b Compiladores - Prof. Yandre - 21
  • Slide 22
  • Anlise Semntica Principais verificaes semnticas: Compatibilidade de tipos... var A: boolean; B: real;... A:=B+0,5; Compiladores - Prof. Yandre - 22
  • Slide 23
  • Anlise Semntica Duplicidade de identificadores: Var A, A, B: integer; Compatibilidade entre declaraes e uso de entidades: Var X: array[1..N] of byte; A: byte;... A:=X.C1; Compiladores - Prof. Yandre - 23
  • Slide 24
  • Anlise Semntica Compatibilidade entre parmetros formal e atual: procedure X (a, b: integer); begin... end;... X(a, b, c); Compiladores - Prof. Yandre - 24
  • Slide 25
  • Tratamento de Erros Este mdulo responsvel por diagnosticar os erros (lxicos, sintticos e semnticos) e emitir mensagens apropriadas; interessante que este mdulo permita recuperar o analisador a partir de uma situao de erro e analise o restante do programa fonte. Compiladores - Prof. Yandre - 25
  • Slide 26
  • Gerao de Cdigo Intermedirio Gera um conjunto de instrues, equivalentes ao programa fonte, para uma mquina hipottica. Ex.: A:=(B+C) * (D+E) Gera-se qudruplas: (+, B, C, T1) (+, D, E, T2) (*, T1, T2, A) Esta representao intermediria tem as seguintes vantagens: Possibilita a otimizao do cdigo intermedirio, a fim de obter cdigo objeto final mais eficiente; Resolve, de maneira gradual, problemas da passagem do cdigo fonte para objeto Compiladores - Prof. Yandre - 26
  • Slide 27
  • Gerao de Cdigo Intermedirio A maior diferena entre o cdigo intermedirio e o cdigo objeto que o intermedirio no especifica detalhes de baixo nvel de implementao, tais como endereos de memria e registradores, entre outros. Para o comando: while i < 100 do i := j * i; o seguinte cdigo de trs endereos (um dos tipos de cdigo intermedirio utilizado, no qual cada instruo deve ter, no mximo, trs operandos) gerado: L0 : if i < 100 goto L1 goto L2 L1: temp := j * i i := temp goto L0 L2:... Compiladores - Prof. Yandre - 27
  • Slide 28
  • Otimizao de Cdigo Funo: melhorar o cdigo intermedirio de forma que ocupe menos espao e/ou execute mais rpido. Principais otimizaes: Agrupamento de sub-expresses comuns: C:= (A+B) * (A+B) (+, A, B, T1) (+, A, B, T2) (*, T1, T2, C) Ou, para o cdigo do slide 27: L0: if i 100 goto L1 temp := j * i i:= temp goto L0 L1... Compiladores - Prof. Yandre - 28 (+, A, B, T1) (*, T1, T1, C) Compiladores - Prof. Yandre - 28
  • Slide 29
  • Otimizao de Cdigo Eliminao de JUMPS desnecessrios:... 10:JUMP 20... 20:JUMP 30... Remoo de comandos invariantes dentro do loop:... For I:= 1 to 100 do Begin... J:=X; {no modifica X}... End; Compiladores - Prof. Yandre - 29 10:JUMP 30... J:=X; {transferir p/ c} For I:= 1 to 100 do Begin... End;
  • Slide 30
  • Gerao de Cdigo Objeto Sua principal funo gerar o cdigo equivalente ao programa fonte para uma mquina real, a partir do cdigo intermedirio otimizado. Compiladores - Prof. Yandre - 30
  • Slide 31
  • Anlise Sinttica (Parsin

Search related