Você está na página 1de 13

Compiladores II

Professor: Flávio Márcio de Moraes e Silva

1
Ementa
• Conceitos de compiladores. Linguagens,
tradutores, compiladores e interpretadores. A
estrutura de um compilador: análise léxica,
análise sintática, representação intermediária,
análise semântica, geração e otimização de
código.

2
Conteúdo Programático
• Aulas Teóricas
– Introdução
– Análise léxica
– Análise Sintática
– Análise Semântica
– Tradução para código intermediário
– Otimização de código
– Geração de código final

3
Atividades
• Aulas teóricas e práticas:
– Programação de algumas etapas de um compilador?
– Exercícios sobre determinados aspectos dos compiladores
• Trabalhos para Casa
– Exercícios
– Realização dos trabalhos solicitados

4
Avaliação
• 3 notas (35, 35 e 30)
• listas de exercícios preparatórias para as provas

5
O que é um compilador?
• Software que traduz o texto que representa
um programa, escrito em uma linguagem de
programação de alto nível, para código de
máquina capaz de ser executado pelo
computador
• Contudo, um compilador pode ser muito mais
do que isso...

6
Importância
• Papel importante no desenvolvimento de
aplicações complexas em tempo útil
• Muitas das matérias abordadas são utilizadas por
outras ferramentas:
– Tradução de linguagens
– Interpretação de descrições (ex.: html, postscript, latex,
ficheiros word)
– Procura de palavras ou frases por motores de busca
– Interpretação de comandos escritos em SQL

7
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 (ler, interpretar e executar)
– Compilador (traduzir)

8
Compilador

Ponto de Origem
Código fonte
descrito numa
linguagem de alto- Compilador
nível (ex.: C, C++,
Java, Pascal, etc.)

Programa em
Ponto de Destino Linguagem de
Máquina

9
Ponto de Origem
• Linguagem imperativa ou de alto nível (C/C++,
Java, Pascal, etc.)
– Estruturas de Estado
• Variáveis do tipo int, float, char, etc
Int sum(int A[], int N) { • Variáveis do tipo array
Int i, sum = 0; • Registros
• Atributos de objetos (linguagens orientadas por objetos)
For(i=0; i<N; i++) {
sum = sum + A[i]; – Computação
} • Expressões (aritméticas, lógicas, etc.)
return sum; • Fluxo de controle (if, switch, etc.)
} • Estruturas de repetição (while, for, do .. While, etc)
• Procedimentos (métodos nas linguagens orientadas por
objetos)

10
Ponto de Destino
• Linguagem máquina que descreve o
programa com base no ISA (Instruction-Set
Architecture) do processador
Sum: Addi $t0, $0, 0 – Estruturas de Estado
Addi $v0, $0, 0
• Memória
Loop: beq $t0, $a1, End
• Registros (de estado, de propósito geral, etc.)
Add $t1, $t0, $t0
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

11
Bibliografia
• [A] Aho, A., Sethi, R., Ullman, J., Lam, M..
Compiladores: Princípios, Técnicas e Ferramentas.
Pearson.
• [B] Price, Ana Maria; Toscani, Simão Sirineo.
Implementação de Linguagens de Programação:
Compiladores. Bookman.

12
Contato com o Professor
• Flávio M. M. e Silva
– flavio.silva@uemg.br
– Teams (chat)

13

Você também pode gostar