Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
RES
ROBERTO TENORIO FIGUEIREDO
www.osfedera.com
tenorio.petrolina@bol.com.br
INTRODU
O
ROBERTO TENORIO FIGUEIREDO
www.osfedera.com
tenorio.petrolina@bol.com.br
Conceito
Conceito
A linguagens deve ser:
Precisa
Ambiguidade indesejvel;
Expressiva
Pode caracterizar toda funo computvel
(Turing completa);
Alto-nvel
Prov abstraes para facilitar programao;
Conceito
Compiladores x Interpretadores
Um compilador transforma um programa de alto nvel escrito em
uma linguagem fonte para um programa executvel em uma
linguagem destino reconhecida por um Sistema Operacional;
O programa resultante deve ser, de alguma maneira, melhor que
o original.
Um interpretador executa um programa executvel, produzindo o
resultado do programa.
A maior parte das tcnicas que veremos nessa disciplina servem
para ambos.
Conceito
...afinal, o programador
poderia escrever direto na
linguagem destino, mais
concreta?
Conceito
Por que usar um compilador:
Facilitar programao (abstrao)
Checar certos tipos de erros e
vulnerabilidades
Gerar cdigo portvel
Otimizar cdigo
velocidade, tamanho, energia, etc.
Histrico
Inicialmente os computadores eram programados
diretamente em linguagem de mquina
No se dava muita importncia ao software, ou produtividade
dos programadores!
Histrico
A estrutura geral de um compilador moderno
ainda se parece com a do primeiro compilador
FORTRAN, embora o interior de todas as partes
j tenha mudado desde ento:
Uma enorme quantidade de pesquisa e
desenvolvimento j foi feita desde ento;
Muitas das tcnicas que vamos ver nesse curso j
so bem antigas (30-40 anos), mas a rea ainda vai
mudando;
Os desafios e o que era importante h 40 anos so
diferentes dos desafios e do que importante hoje
Estrutura Bsica de um
Compilador
Anlise lxica
Anlise sinttica
Anlise semntica
Gerador de Cdigo Intermedirio;
Otimizao
Gerao de Cdigo de mquina;
Estrutura Bsica de um
Compilador
- Cria representaes
intermedirias do
programa
- Verifica presena de
certos tipos de erro
- Constri o programa
destino a partir de
representaes
intermedirias
Estrutura Bsica de um
Compilador
Front-end
Analisador Lxico
Primeiro passo do front-end: Organizar caracteres de
entrada em grupos, chamados tokens (reconhecer tokens)
Tokens so as palavras do programa;
O analisador lxico transforma o programa de uma
sequncia de caracteres sem nenhuma estrutura para
uma sequncia de tokens;
Ex:
if x == y then z = 1; else z = 2;
Tokens:
if, x, ==, y, then, z, =, 1, ;, else, z, =, 2, ;, EOF
Analisador Lxico
Normalmente o analisador lxico para uma
linguagem produzido mecanicamente a partir
uma especificao lxica definida por expresses
regulares;
Um gerador de analisador lxico um compilador
para a sua linguagem de especificao!
Existem facilitadores, mas vamos ver
escrever um analisador lxico mo
como
Analisador Sinttico
O analisador sinttico agrupa os tokens em termos
sintticos da linguagem (como sujeito, verbo, objeto,
orao, perodo...). uma organizao de tokens em
uma estrutura hierrquica.
Analisador Sinttico
Tambm comum se gerar mecanicamente um analisador
sinttico a partir de uma especificao da sintaxe da
linguagem, sua gramtica;
Novamente, um programa gerador
sintticos apenas outro compilador
de
analisadores
uma
rvore
Analisador Semntico
Agora que sabemos a estrutura do programa, podemos tentar entender
seu significado para detectar erros. O analisador semntico checa se o
programa respeita regras bsicas de consistncia.
Gerador de Cdigo
Intermedirio
Indentao;
Espaos e quebras de linha;
Comentrios;
Quaisquer outros elementos desnecessrios;
Gerador de Cdigo
Intermedirio
Representaes intermedirias de
cdigo facilitam anlise e transformao
Exemplos
3 endereos: cada instruo usa no mais
que trs operandos
SSA: cada uso de varivel est associado a
apenas uma definio
Pilha: operandos so acessveis apenas a
partir da pilha
Exemplo: 3 endereos
id1 = id2 + id3 * inttofloat(60)
t1 = inttofloat(60)
t2 = id3 * t1
t3 = id2 + t2
id1 = t3
Otimizador
Transformao automtica dos programas
de modo que eles:
-
Exemplo: Constant
propagation
t1 = inttofloat(60)
t2 = id3 * t1
t3 = id2 + t2
id1 = t3
t2 = id3 * 60.0
id1 = id2 + t2
Otimizador
Exemplo:
X := X + 1;
X := X + 2; X := X + 3;
Por exemplo:
x = y * 0 e x = 0 so equivalentes? Depende!
DVIDAS