Anda di halaman 1dari 39

Unidade II

COMPILADORES E
COMPUTABILIDADE

Prof. Leandro Fernandes

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

Assemblers, ligadores e carregadores.

Anlise sinttica ascendente


analisadores LR(1)
O nome LR(1) indica que:
A cadeia de entrada examinada da
esquerda para a direita (left-to-right), isto
, do incio para o fim do arquivo.
O analisador procura construir uma
derivao direta (rightmost) invertida:
Torna-se invertida para que a entrada
possa ser examinada do incio para
o fim.
Considera
Considera-se
se apenas o 1o smbolo do
restante da entrada.

Anlise sinttica ascendente


analisadores LR(1)
Decidimos qual regra A deve ser
aplicada encontrando os ns vizinhos
rotulados com os smbolos de .
A reduo para A consiste em
acrescent-lo rvore como um que
agrupe todos os smbolos de como
seus ns filhos.
Considera duas informaes:
O estado atual da anlise.
O smbolo corrente da entrada.
entrada
Uma tabela M codifica as operaes a
serem realizadas de acordo com o
autmato de reconhecimento.

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 .

Um estado do processo de anlise


representado por um conjunto de itens.

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

Operaes do analisador LR(1)


A tabela do analisador define as aes de:
Empilhamento (shift): ocorrer quando
uma transio com um terminal no estado
corrente (topo da pilha) for realizada.
Reduo: quando existe um item completo
B e se o smbolo da entrada pertencer
ao Follow(B), feita uma reduo pela
regra B.
Os || estados correspondentes a
devem ser retirados da pilha e o estado
( B) d
(q,B)
deve ser empilhado,
ilh d
representando B.
Aceitao: quando ocorre a reduo pela
regra zero.
Programa sintaticamente correto!

Tabela do analisador LR(1)

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

Analisando a sentena: a+a

Pilha

Entrada

Regra

Empilha: a

a+a

M[0, a] = 5

50

+a

M[5, +] = r6 Reduz: Fa

Desempilha o estado 5 (ref. smbolo a), volta para o


estado 0 e empilha 3 (ref. smbolo F)
R d
T F
TF
30
+a
M[3 +]] = r4
M[3,
4 Reduz:
20

+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[9, $] = r1 Reduz: EE+T

Desempilha os estados 9, 6 e 1 (ref. smbolos E+T),


volta para o estado 0 e empilha 1 (ref. smbolo E)
10

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.

Anlise semntica: 3a etapa do


processo de anlise

Analisador
lxico

Tokens

Analisador
sinttico

rvore sinttica

Analisador
semntico

Tabela de
smbolos

Tarefas da anlise semntica


responsvel por trs tarefas:
Construir a descrio interna dos tipos e
das estruturas de dados definidos no
programa do usurio.
Armazenar na tabela smbolos as
informaes sobre os identificadores (de
constante, tipos, variveis,
procedimentos, parmetros e funes)
que so usados no programa.
Verificar o programa quanto a erros
semnticos (erros dependentes de
contexto) e checagens de tipos com
base nas informaes contidas
na 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.

Operaes (insero e busca)


envolvendo a tabela de smbolos
Podem ser implementadas como:
Chamadas na gramtica de atributos.
L L1, id

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.

Gerao de cdigo: enfim, a


traduo efetivamente!
Corresponde 1a etapa do processo de
sntese (modelo de anlise e sntese).
Em geral, ocorre em duas fases:
Traduo da estrutura construda na
anlise sinttica para um cdigo em
linguagem intermediria, usualmente
independente do processador.
Traduo do cdigo em linguagem
intermediria para a linguagem
simblica do processador
processador-alvo.
alvo.
Produo do cdigo binrio realizada
por outro programa (montador).

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.

Cdigo intermedirio: rvore e grafo


de sintaxe
A rvore de sintaxe mostra a estrutura
hierrquica de um programa fonte.
O grafo de sintaxe inclui simplificaes
da rvore de sintaxe.
Exemplo: a = b * c + b * c
:=

:=
a

+
*
b

+
*

*
c

Cdigo intermedirio: cdigo de


trs endereos
Cada instruo ter, no mximo, trs
variveis (dois operandos e o resultado):
Formato independente e fcil de
traduzir para linguagem simblica de
qualquer processador.
Expresses complexas devem ser
decompostas em vrias expresses:
Necessitam de variveis temporrias!
Exemplos de instrues:
A := B op C , A := op B , A := B
goto L
if A op_rel B goto L

Cdigo intermedirio: cdigo de


trs endereos
Exemplo: a = b + c * d
Qudruplas:
Op

Arg1

Arg2

Res

_t1

_t1

Triplas:
Op

Arg1

Arg2

(1)

:=

(2)

Gerao de cdigo: traduo


dirigida pela sintaxe
Construda a partir do mecanismo
empregado na verificao de tipos, isto
, uma gramtica de atributos.
Adicionam-se regras que permitam a
gerao de cdigo intermedirio
simultaneamente a aes semnticas.
S id := E

geracod(id.valor ":=" E.valor)

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.

A gerao de cdigo intermedirio torna o


compilador mais portvel, mas a otimizao
mais difcil por estar longe do cdigo alvo.

II. O problema de gerar cdigo timo indecidvel.


que,,
Geralmente,, so usadas tcnicas heursticas q
na maior parte do tempo, geram bom cdigo.
III. So exemplos de cdigo intermedirio as
notaes pr-fixas, ps-fixas e o cdigo de trs
endereos.
Pode-se afirmar ser correta a alternativa:
a)) Item
It
I.
I
b) Item II.
c) Itens I e II.
d) Itens II e III.
e) Itens I, II e III.

Montadores, ligadores (linkers) e


carregadores (loaders)
mov ax
add bx
load $x

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

Formato do arquivo objeto

Dado pela identificao de tipo,


Cabealho tamanho do cdigo e, eventualmente,
o arquivo de origem.
Cdigo
gerado

e os dados em
Contm as instrues
formato binrio.

Contm as posies no cdigo em


Relocao que ocorrero mudanas quando for
definida a posio de carregamento.
Tabela de
smbolos

Lista de smbolos g
globais definidos
no mdulo e smbolos externos, que
devem vir de outros mdulos.

Contm referncias para o cdigo


Depurao fonte (ex.: nmero de linha e nomes
de identificadores).

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.

Os montadores (assemblers) realizam a converso


de programas em linguagem de montagem para a
linguagem de mquina.

II. Um editor de ligao, ou ligador (linker), permite


p
em
combinar mdulos montados separadamente
um nico programa.
III. A funo principal de um programa carregador
(loader) permitir a edio de um programa em
linguagem de alto nvel.
Est correta a alternativa:
a)) Item
It
I.
I
b) Item III.
c) Itens I e II.
d) Itens II e III.
e) Todos os itens esto corretos.

AT A PRXIMA!

Anda mungkin juga menyukai