Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introdução à Compilação
- Aula 01 -
Noiza Waltrick Trindade
[noiza@uems.br]
O que é um Compilador?
Pág. 2
O que é um Compilador?
Pág. 3
É possível representar completamente a sintaxe de
uma LP através de uma gramática sensível ao
contexto.
Mas como não existem algoritmos práticos para
tratar essas gramáticas, a preferência recai em usar
gramáticas livres de contexto.
Deixa-se para a análise semântica a verificação de
todos os aspectos da linguagens que não se
consegue exprimir de forma simples usando
gramáticas livres de contexto.
Pág. 4
A implementação de reconhecedores de linguagens
regulares (autômatos finitos) é mais simples e mais
eficiente do que a implementação de reconhecedores de
linguagens livres de contexto (autômatos de pilha).
Nesse caso, é possível usar expressões regulares para
descrever a estrutura de componentes básicos das LP, tais
como identificadores, palavras reservadas, literais numéricos,
operadores e delimitadores, etc.
Essa parte da tarefa de análise (análise léxica) é
implementada separadamente, pela simulação de autômatos
finitos.
Pág. 5
Compiladores – Separando em partes
'
Haskell
IL PhxSTGCompiler
GHC Nativo
Código Assembly
linguagem fonte;
/ Código C Código MSIL
(Texto)
◦Assembler
O back-end
/ dependeILDASM exclusivamente da Assembly MSIL
Compilador C
linguagem objeto.
Código Nativo JIT
Pág. 7
Compiladores – Separando em partes
Pág. 8
Compiladores – Separando em partes
Pág. 9
Compiladores - Fases
código fonte
Analisador
léxico
Analisador
sintático
Otimizador
de código
Gerador de
código
Pág. 10 código alvo
Fases
Pág. 11
Análise Léxica
Pág. 13
Análise Sintática
Pág. 14
Análise Sintática
Comando
:=
Identificador Expressão
montante +
Expressão Expressão
Identificador *
Expressão Expressão
saldo
Identificador Número
taxa_de_juros 60
Pág. 15
Análise Semântica
* *
montante + montante +
saldo * saldo *
Pág. 17
Gerador de Código Intermediário
Pág. 18
Gerador de Código Intermediário
Pág. 19
Gerador de Código Intermediário
Pág. 20
Gerador de Código Intermediário
Pág. 21
Otimizador de Código
Independente da máquina
Melhora o código intermediário de modo que o
programa objeto seja menor (ocupe menos espaço
de memória) e/ou mais rápido (tenha tempo de
execução menor)
A saída do otimizador de código é um novo código
intermediário
Pág. 22
Otimizador de Código
1. Load b
2. Mult c
3. Add a
4. Store x
Pág. 23
Otimizador de Código
Pág. 24
Gerador de Código
Pág. 27
Tratamento de Erros