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