A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Compiladores – Introdução

Apresentações semelhantes


Apresentação em tema: "Compiladores – Introdução"— Transcrição da apresentação:

1 Compiladores – Introdução
IF688 – Teoria e Implementação de Linguagens Computacionais Compiladores – Introdução Marcelo d’Amorim

2 Página da disciplina http://www.cin.ufpe.br/~if688 Requisitos
Todo material da disciplina (e.g., slides, cronograma de aulas, etc.) está disponível nesta página! Requisitos Linguagem de programação Linguagens formais e autômatos

3 Definição de um compilador
Tradutor de uma linguagem mais abstrata (origem) para uma mais concreta (destino) public class HelloWorld {    public static void main(String[] args) {        System.out.println("Hello"); }} javac javap public class HelloWorld extends java.lang.Object{ public HelloWorld();  Code:   0:   aload_0   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V   4:   return public static void main(java.lang.String[]);  Code:   0:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;   3:   ldc     #3; //String Hello   5:   invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V   8:   return }

4 Onde termina a tradução?
Se um compilador é um tradutor de uma linguagem mais abstrata para uma mais concreta... Onde termina a tradução? Tradução termina no hardware Bootstrapping é o processo de tradução para a máquina mais concreta Cada camada acima caracteriza uma máquina abstrata

5 Diagrama de “Tombstone”
Símbolo à esquerda define linguagem origem. Símbolo à direita define linguagem destino e na base a linguagem de implementação.

6 Para que serve um compilador?
Diminuir esforço humano Checar certos tipos de erros automaticamente Gerar código portável Otimizar código velocidade, tamanho, energia, etc. Afinal o programador poderia escrever direto na linguagem destino 6

7 Histórico Nos anos 50, compiladores eram programas notadamente difíceis de se escrever Hoje, compiladores podem ser desenvolvidos com bem mais facilidade Geradores de código disponíveis Assemblers no início dos anos 50; Macro Assemblers; Fortran, na segunda metade dos anos 50, juntamente com Cobol e Lisp. 7

8 ORGANIZAÇÃO DE UM COMPILADOR

9 Compilador, interpretador, e VM
Entrada Compilador Pgm. Origem Pgm. Destino Saída Entrada Interpretador Saída Pgm. Origem Entrada Pgm. Destino Pgm. Origem Compilador VM Saída

10 Processo de compilação
Programa fonte assembler pre-processador Código objeto (relocável) Programa fonte modificado Linker resolve endereços de nomes externos não resolvidos dentro do próprio módulo; Loader carrega o programa na memória linker-loader Bibliotecas / código objeto compilador Código objeto (executável) Programa em assembler 10

11 Compilação envolve duas etapas
Análise (front-end) Cria representações intermediárias do programa Verifica presença de certos tipos de erro Síntese (back-end) Constrói o programa destino a partir de representações intermediárias

12 Separação entre front-end e back-end para criação de múltiplos compiladores
Pascal Fortran C# C Front-end Front-end Front-end Front-end código intermediário Back-end Back-end Back-end Back-end ARM MIPS x86 .NET 12

13 ANáLISE

14 Análise do programa fonte
Análise léxica Organiza caracteres de entrada em grupos, chamados tokens Análise sintática Organiza tokens em uma estrutura hierárquica Análise semântica Checa se o programa respeita regras básicas de consistência

15 Análise léxica (scanning)
Lê os caracteres de entrada e os agrupa em sequências chamadas tokens Os tokens são consumidos na fase seguinte (parsing)

16 Exemplo Tabela de Símbolos
position = initial + rate * 60 <identificador, 1>, <=>, <identificador, 2>, <+>, <identificador, 3>, <*>, <number, 60> Analisador Léxico nome tipo 1 position - 2 initial 3 rate Tabela de Símbolos

17 Exemplo O projetista do compilador caracteriza o analisador léxico através de expressões regulares (ERs). Analisador Léxico

18 Exemplo A geração do analisador léxico é automática a partir da definição das ERs. Ver: FLEX, JLex, etc. Analisador Léxico

19 Tabela de símbolos Estrutura de dados usada para guardar identificadores e informações sobre eles. Por exemplo: tipo do identificador escopo: onde o identificador é válido no programa se for um procedimento ou função: número e tipo dos argumentos, forma de passagem dos parâmetros e tipo do resultado.

20 Usada e atualizada em várias etapas da compilação.
Tabela de símbolos nome tipo 1 position - 2 initial 3 rate Usada e atualizada em várias etapas da compilação.

21 Análise sintática (parsing)
A partir dos tokens cria uma estrutura em árvore (árvore sintática) que representa a estrutura gramatical do programa

22 Exemplo <identificador, 1>, <=>, <identificador, 2>, <+>, <identificador, 3>, <*>, <number, 60> = + <id,1> Analisador Sintático <id,2> * <id,3> 60

23 Gramática livre de contexto (BNF) caracteriza a linguagem.
Exemplo Gramática livre de contexto (BNF) caracteriza a linguagem. <identificador, 1>, <=>, <identificador, 2>, <+>, <identificador, 3>, <*>, <number, 60> = + <id,1> Analisador Sintático <id,2> * <id,3> 60

24 Gramática livre de contexto (BNF) caracteriza a linguagem.
Exemplo Gramática livre de contexto (BNF) caracteriza a linguagem. A geração do parser a partir de uma BNF é automática. Ver Bison, JCup, yacc, etc. <identificador, 1>, <=>, <identificador, 2>, <+>, <identificador, 3>, <*>, <number, 60> = + <id,1> Analisador Sintático <id,2> * <id,3> 60

25 Gramática livre de contexto (BNF) caracteriza a linguagem.
Exemplo Gramática livre de contexto (BNF) caracteriza a linguagem. A geração do parser a partir de uma BNF é automática. Ver Bison, JCup, yacc, etc. Para cada classe gramatical da BNF haverá uma estrutura de dados correspondente. <identificador, 1>, <=>, <identificador, 2>, <+>, <identificador, 3>, <*>, <number, 60> = + <id,1> Analisador Sintático <id,2> * <id,3> 60

26 Análise léxica e sintática hoje
Bar.foo Foo.lex JLex FooLexer. java FooLexer.class Foo.jcup JCup FooParser.java FooParser.class

27 Erro: Construtor de Circle recebe 3 números com parâmetro.
Análise semântica Procura possíveis erros semânticos e guarda informações contextuais adicionais Exemplo Point p = new Point(1, -2); Circle c = new Circle(p, 5); Erro: Construtor de Circle recebe 3 números com parâmetro.

28 SÍNTESE

29 Código intermediário (IR)
Representações intermediárias de código facilitam análise e transformação Exemplo: 3 endereços (MIPS) cada instrução usa não mais que três operandos

30 Qual a vantagem de se usar tal representação?
Exemplo: 3 endereços id1 = id2 + id3 * inttofloat(60) t1 = inttofloat(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3 Qual a vantagem de se usar tal representação?

31 Otimização de código Realiza transformações no código com objetivo de melhorar algum aspecto relevante tempo de execução, consumo de memória, tamanho do código executável, etc. Pode ser específico de arquitetura ou geral Específica: Register allocation Geral: Constant (folding and) propagation

32 Específica: Register Allocation
É mais eficiente realizar operações manipulando dados próximos a CPU, em registradores Register Allocation associa cada variável do programa a um registrador com o objetivo de minimizar spilling* t1 = inttofloat(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3 * Spilling é o processo de descarga e recarga de registradores a partir da memória

33 Geral: Constant Propagation
t1 = inttofloat(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3 t2 = id3 * 60.0 t3 = id2 + t2 id1 = t3

34 Geração de código Traduz código intermediário para a linguagem-destino
t2 = id3 * 60.0 id1 = id2 + t2 ... LDF R2, id3 MULF R2, R2, #60.0 LDF R1, id2 ADDF R1, R1, R2 STF id1, R1 Gerador de código

35 Estrutura do curso Análise Síntese Análise Léxica Análise Sintática
Análise Semântica Síntese Otimização de código Geração de código Ambiente de execução

36 Uso da tecnologia de compiladores
Ferramentas de inspeção de código E.g., Lint and FindBugs Descoberta de erros E.g., Coverity and Klockwork Você não precisa ser um engenheiro de compiladores para ter interesse na área!


Carregar ppt "Compiladores – Introdução"

Apresentações semelhantes


Anúncios Google