Beruflich Dokumente
Kultur Dokumente
COMPILADORES E
COMPUTABILIDADE
Roteiro
Anlise sinttica ascendente:
Analisadores LR(1).
Anlise semntica:
Gramtica de atributos.
Tabela de smbolos.
Gerao de cdigo:
Linguagens intermedirias.
Traduo dirigida pela sintaxe.
Otimizaes.
Oti i
Construo do analisador
Vrias possibilidades precisam ser
consideradas em um mesmo momento.
Um item A indica o ponto atual em
que se encontra a anlise, ou seja:
A regra A foi usada na derivao
da cadeia de entrada.
Os smbolos terminais derivados de
j foram encontrados.
Falta encontrar os smbolos terminais
derivados de .
Gramtica aumentada
Suponha a gramtica (dada a esquerda):
(0) S E
(1) E E + T
(1) E E + T
(2) E T
(2) E T
((3)) T T * F
(3) T T * F
(4) T F
(4) T F
(5) F ( E )
(5) F ( E )
(6) F a
(6) F a
A
Acrescenta-se
t
a nova regra (regra
(
0) para
que seja possvel a identificao correta
da raiz da rvore sinttica, diferenciandoa de outras ocorrncias do
smbolo inicial.
Construo do analisador:
definindo os estados
O estado inicial dado pelo item
formado a partir da regra 0 e contm
todos os outros itens associados ao
fechamento do estado.
Estado 0:
(0)
S E
S E
(1)
EE+T
EE+T
(2)
ET
ET
(3)
TT*F
TT*F
(4)
TF
TF
(5)
F(E)
F ( E )
(6)
Fa
Fa
Construo do analisador:
definindo os estados
Os demais estados do autmato so
obtidos qual o smbolo esperado para os
itens do estado.
Estado 1:
Estado 0:
S E
E
E E + T
E T
T T * F
T F
F ( E )
F a
S E
E E + T
...
Estado 2:
T F
...
Estado 5:
F a
r0
r2
r2
r2
r4
r4
r4
r4
r6
r6
r6
r6
10
r1
r1
r1
10
r3
r3
r3
r3
11
r5
r5
r5
r5
11
Pilha
Entrada
Regra
Empilha: a
a+a
M[0, a] = 5
50
+a
M[5, +] = r6 Reduz: Fa
+a
M[2, +] = r1 Reduz: ET
10
+a
M[1, +] = 6
Empilha: +
610
M[6, a] = 5
Empilha: a
5610
M[5, $] = r6 Reduz: Fa
3610
R d
T F
TF
M[3 $] = r4
M[3,
4 Reduz:
9610
M[1, $] = r0
Interatividade
A respeito dos analisadores sintticos LR(1), no
se pode afirmar que:
a) So analisadores redutores (estilo shift-reduce
ou empilha-reduz) ascendentes. So eficientes
e leem a sentena em anlise da esquerda para
a direita, produzindo uma derivao mais
direita ao reverso.
b) Entre as vantagens, pode-se afirmar que so
capazes de reconhecer praticamente todas as
estruturas sintticas definidas por GLC.
c) So capazes de descobrir erros sintticos
durante a leitura da sentena em anlise.
d) O YACC gera analisadores ascendentes.
e) Os erros so identificados sempre
no momento mais tarde, isto , na
leitura de tokens.
Analisador
lxico
Tokens
Analisador
sinttico
rvore sinttica
Analisador
semntico
Tabela de
smbolos
O componente semntico
Verificar a utilizao adequada dos
identificadores.
Anlise contextual: declaraes prvias
de variveis, escopo de uso etc.
Checagem
g
de tipos
p e compatibilidade.
p
Essas tarefas esto alm do domnio da
sintaxe (Gram. Livres de Contexto - GLC).
Aumenta a GLC e completa a definio
do que so programas vlidos.
A anlise ocorre em dois aspectos:
Semntica esttica.
Semntica de tempo de execuo.
O componente semntico:
semntica esttica
Conjunto de restries que determinam
se programas sintaticamente corretos
so vlidos.
As atividades compreendidas so:
A checagem de tipos.
A anlise de escopo de declaraes.
A verificao da quantidade e dos tipos
dos parmetros em sub-rotinas.
Pode ser especificada formalmente por
uma gramtica de atributos.
O componente semntico:
semntica de tempo de execuo
usada para especificar o que o
programa faz, isto , a relao do
programa-fonte (objeto esttico) com a
sua execuo dinmica.
Exemplo:
L:gotoL;
if (i<>0)&&(K/I>10)...
Importante para a gerao de cdigo.
Geralmente, especificada de modo
informal, mas possvel o uso de
formalismos, tais com as gramticas de
atributos (dentre outros).
Gramtica de atributos
uma gramtica livre de contexto
estendida para fornecer sensitividade ao
contexto atravs de atributos ligados a
terminais e no terminais.
Um atributo qualquer propriedade de
uma construo da linguagem.
(1) D
TL
L.in := T.tipo
(2) T
int
T.tipo := inteiro
(3) T
float
T.tipo := real
(4) L
L1, id
L1.in := L.in
incluirTS(id.token, L.in)
(5) L
id
incluirTS(id.token, L.in)
Calculando os atributos
Com base na rvore sinttica explcita.
Ad hoc (comandada pelo parser).
Podem ser calculados tanto durante a
compilao quanto na execuo.
Exemplos:
Tipo de dado de uma varivel
(compilao).
Valor de uma expresso (execuo,
exceto expresses que tratem de
constantes).
Endereo do incio do cdigo objeto de
um procedimento (compilao).
Declarao de objeto no contexto
(compilao, para linguagens que
exigem declarao prvia).
Tabela de smbolos
Armazena as informaes sobre todos
os identificadores do cdigo fonte:
Captura a sensitividade ao contexto e
as aes executadas no decorrer
do programa.
Est atrelada a todas as etapas da
compilao, sendo a estrutura principal
do processo.
Fundamental para:
Realizar a anlise semntica.
semntica
A gerao de cdigo.
if (buscaTS(id) == false)
incluirTS(id, L.tipo)
else
ERRO(J declarado)
Diretamente na anlise sinttica.
Insero: quando analisa declaraes
de variveis, sub-rotinas, parmetros.
Busca: em atribuies, expresses,
chamadas de sub-rotinas ou qualquer
outro uso de um identificador em um
bloco de comandos.
Interatividade
Analise as mensagens de erro a seguir:
I. Identificador j declarado no escopo atual.
II. Identificador de tipo esperado.
III. Quantidade de parmetros incompatvel com
a funo.
IV. Funo ou varivel no definida (lado
esquerdo de atribuies).
Quais destes so de natureza semntica?
a) Apenas o item I.
b) Itens I e II.
II
c) Itens I, III e IV.
d) Itens I, II e IV.
e) Itens I, II, III e IV.
Cdigo intermedirio
H vrias formas de representao de
cdigo intermedirio, sendo as mais
comuns:
rvore e grafo de sintaxe:
Notaes ps-fixadas
ps fixadas e pr
pr-fixadas.
fixadas.
Representaes linearizadas.
Cdigo de trs endereos:
Qudruplas ou triplas.
Instrues
assembler.
HIR, MIR e LIR High, Medium e Low
Intermediate Representation.
:=
a
+
*
b
+
*
*
c
Arg1
Arg2
Res
_t1
_t1
Triplas:
Op
Arg1
Arg2
(1)
:=
(2)
E E1 + E2
E.val = geratemp();
geracod(E.val ":=" E1.val "+" E2.val)
E E1 * E2
E.val = geratemp();
geracod(E.val ":=" E1.val "*" E2.val)
E ( E1 )
E.val = E1.val;
E id
E.val = id.val;
Interatividade
Analise as seguintes afirmativas:
I.
Compilador
interm
Montador
Ligador
00101
11010
00101
00101
11010
00101
00101
11010
00101
obj
obj
obj
00101
11010
00101
exe
Carregador
RAM
Montadores (assemblers)
As funes da montagem compreendem:
Substituir os mnemnicos pelos
opcodes do conjunto de instrues do
processador.
Determinar de maneira absoluta ou
relativa (termos do valor do registrador
Program Counter) o endereo de destino
dos rtulos.
Reservar espao para dados de acordo
com o tipo associado a cada varivel.
Gerar constantes em memria para
variveis e constantes, determinando o
valor associado ao modo de
endereamento do operando.
Assemblers (montadores)
Programa
em
linguagem
de alto nvel
Programa em
linguagem de
montagem (assembly)
Rtulo
int a,b,c;
read(a)
read(b)
c = a + b;
write(c);
Mnemnico
Programa em
linguagem de
mquina
Oper
End.
Opcod
Oper
N1
N2
N1
N2
N3
OUTPUT N3
STOP
N1: SPACE
N2: SPACE
N3: SPACE
00
02
04
06
08
10
12
13
14
15
12
12
10
01
11
13
14
??
??
??
13
14
13
14
15
15
INPUT
INPUT
LOAD
ADD
STORE
e os dados em
Contm as instrues
formato binrio.
Lista de smbolos g
globais definidos
no mdulo e smbolos externos, que
devem vir de outros mdulos.
Ligadores (linkers)
Reunir os vrios mdulos, objetos
obtidos da traduo dos vrios arquivos
fontes em um nico programa, o mdulo
absoluto de carga.
Deve ser capaz de resolver referncias
cruzadas endereos dados pelos
mdulos devem ser atualizados
(problema de relocao).
Quando existe um procedimento A que
chama a um procedimento B, o endereo
absoluto de B s conhecido aps
a ligao (problema de referncia
externa).
Tarefas do linker
Construir uma tabela com todos os
mdulos objetos e seus respectivos
comprimentos.
Atribuir um endereo de carga a cada
mdulo objeto.
Relocar todas as instrues que contm
um endereo, adicionando uma
constante de relocao (endereo inicial
de cada mdulo).
Encontrar todas as instrues que
referenciam outros procedimentos e
inserir nelas o endereo absoluto dos
mesmos.
Carregador (loader)
Copiar um programa para a memria
principal e preparar sua execuo.
Atividades:
Verificar se o programa existe.
quantidade de memria
Avaliar a q
necessria e solicit-la ao SO.
Copiar o contedo do arquivo (cdigo)
para a memria.
Ajustar os endereos do cdigo
p
executvel de acordo com a posio
base de carregamento.
Tipos de carregadores: absolutos,
relocador e dinmico.
Tipos de carregadores
Absoluto: considera que programa
carregado sempre no mesmo endereo.
Relocador: se a carga do programa na
posio X da memria, adiciona X a cada
uma das referncias do programa.
Dinmico: em situaes de swapping,
pois os processos no necessariamente
retornam mesma posio!
Executa relocao no momento em que
a posio for referenciada.
Os endereos devem ser relativos ao
incio do mdulo na memria.
Interatividade
Analise as afirmativas:
I.
AT A PRXIMA!