Introdução da disciplina. Compiladores, Aula Nº 1 João M. P. Cardoso 1 ©Universidade do Algarve Aula 1 O que é um compilador? Software que traduz o texto que representa um programa para código máquina capaz de ser executado pelo computador Contudo, um compilador pode ser muito mais do que isso... 2 ©Universidade do Algarve Aula 1 Importância Papel importante no desenvolvimento de aplicações complexas em tempo útil Muitas das matérias abordadas são utilizadas por outras ferramentas: 3 Tradução de linguagens Interpretação de descrições (ex.: html, postscript, latex, ficheiros word) Procura de palavras ou frases por motores de busca ©Universidade do Algarve Aula 1 Dilema da Programação Assembly é fastidioso, erróneo, pouco produtivo, etc. Embora possa permitir melhor desempenho Desenho de linguagens de alto-nível Como implementar a linguagem? Interpretador Compilador 4 ©Universidade do Algarve Aula 1 Compilador Ponto de Origem Código fonte descrito numa linguagem de altonível (ex.: C, C++, Pascal, etc.) Compilador Ponto de Destino 5 Programa em Linguagem Máquina ©Universidade do Algarve Aula 1 Ponto de Origem Linguagem imperativa (e.g., C/C++, Java, Pascal, etc.) Estado • Variáveis escalares Int sum(int A[], int N) { • Variáveis do tipo array Int i, sum = 0; • Registos For(i=0; i<N; i++) { • Atributos de objectos (linguagens orientadas por sum = sum + A[i]; objectos) } Computação return sum; • Expressões (aritméticas, lógicas, etc.) } • Enunciados de atribuição • Fluxo de controlo (if, switch, etc.) • Procedimentos (métodos nas linguagens orientadas por objectos) 6 ©Universidade do Algarve Aula 1 Ponto de Destino Linguagem máquina que descreve o programa com base no ISA (Instruction-Set Architecture) do processador Estado Sum: Addi $t0, $0, 0 Addi $v0, $0, 0 Loop: beq $t0, $a1, End • Memória Add $t1, $t0, $t0 • Registos (de estado, de propósito geral, etc.) Add $t1, $t1, $t1 Computação Add $t1, $t1, $a0 • Instruções do ISA (MIPS): Lw $t2, 0($t1) • Lw $3, 100($2) Add $v0, $v0, $t2 • Add $3, $2, $1 Addi $t0, $t0, 1 • Bne $2, $3, label J Loop • … End: jr $ra 7 ©Universidade do Algarve Aula 1 Tópicos Estudo das etapas de um compilador Implementação de algumas dessas etapas Aulas práticas serão vocacionadas para implementação e realização de alguns exercícios 8 ©Universidade do Algarve Aula 1 Docentes João M. P. Cardoso [email protected] Gab. 2.65 Margarida M. Moura [email protected] Gab. 2.67 9 ©Universidade do Algarve Aula 1 Conteúdo Programático Aulas Teóricas 10 Introdução Análise lexical Análise Sintáctica Análise Semântica Tradução para código intermédio Geração de código final Optimização de código Tópicos avançados ©Universidade do Algarve Aula 1 Conteúdo Programático Aulas Teórico-Práticas Trabalhos para Casa 11 Programação de várias etapas de um compilador (vamos utilizar Java) Exercícios de papel e lápis sobre determinados aspectos Exercícios levantados nas aulas teóricas Realização dos trabalhos para avaliação ©Universidade do Algarve Aula 1 Avaliação 1 Frequência (60 %) + Trabalhos (40%) 1 Exame de Época Normal 1 Exame de Recurso Possibilidade da nota dos trabalhos contar 40 % nos exames. 12 ©Universidade do Algarve Aula 1 Bibliografia Andrew W. Appel. Modern Compiler Implementation in Java, Cambridge University Press, 1998. Alfred V. Aho, Ravi Sethi, Jeffery D. Ullman. Compiler Principles, Techniques, and Tools, Addison-Wesley, 1986. [existe uma versão brasileira] Dick Grune, Henri E. Bal, Ceriel J. H. Jacobs, and Koen G. Langendoen, “Modern Compiler Design,” John Wiley & Sons, Ltd, 2000. Rui Gustavo Crespo. Processadores de Linguagens. IST Press. 2001. http://istpress.ist.utl.pt/lprocess.html Com tópicos mais avançados: Steven S. Muchnick. Advanced Compiler Design and Implementation, Morgan Kaufmann Publishers, 1997. 13 ©Universidade do Algarve Aula 1 Boa sorte! POR EXEMPLO, TENHO QUE SABER COMO FUNCIONA UM COMPILADOR. 14 ©Universidade do Algarve E DEPOIS? DEPOIS? DEPOIS VAMOS CONSTRUIR UM COMPILADOR! Aula 1