Você está na página 1de 38

COMPILADO

RES
ROBERTO TENORIO FIGUEIREDO
www.osfedera.com
tenorio.petrolina@bol.com.br

ANLISE
SEMNTICA
(TRADUO DIRIGIDA POR
SINTAXE)
ROBERTO TENORIO FIGUEIREDO
www.osfedera.com
tenorio.petrolina@bol.com.br

CONCEITO
Tcnica de especificao de compiladores
tradutores que permite associar aes
semnticas s regras da gramtica.
Essa tcnica utilizada em quase todos os
compiladores modernos.
Forma simples de definio semntica, mas
no a nica.

Traduo dirigida por


sintaxe
Como funciona?
Associa aes a produes de uma
gramtica

Para que serve?


Construir rvore sinttica
Estamos
Checagem de tipos
interessados
Traduzir entrada
em todas
etc.
estas

aplicaes!

Aes e Atributos
Uma ao tambm chamada de regra
semntica e geram rotinas para navegar na
parse tree.
Conceitualmente, aes criam e associam
atributos aos ns da rvore sinttica.
O processo de avaliao dos atributos
chamado anotao ou decorao da parse
tree.

Aes e Atributos
A criao feita atravs dos
esquemas de traduo que so
extenses em uma gramtica livre
de contexto.

Dois tipos de atributo


Dois tipos de atributos: sintetizados
herdados. Sendo S um smbolo, temos:

Sintetizados: o valor de um atributo sintetizado


se ele computador a partir, exclusivamente,
dos valores dos atributos dos filhos de S;
Herdados: o valor de um atributo herdado se
ele computado a partir dos valores dos
atributos dos irmos ou do pai de S.

Dois tipos de atributo


Sintetizados (dependem dos ns
filho)
Herdados (dependem de ns pai e
irmo)
Direo da seta
indica direo
em que o valor
do atributo
calculado
sintetizados herdados

Atributos sintetizados
Implementao simples: anota-se
parse tree com busca bottom-up
(ps-ordem)
Muito usada na
prtica!
Uma definio Satribudos usa apenas
atributos sintetizados

Exemplo
Produo

Regra semntica

L g E \n
E g E1 + T
EgT
T g T1 * F
TgF
Fg(E)
F g digit

Print E.val
E.val = E1.val + T.val
E.val = T.val
T.val = T1.val * F.val
T.val = F.val
F.val = (E.val)
F.val = digit.lexval

rvore de 3 * 5 + 4
decorada
E.val =

E.val =
T.val =

+ T.val =

F.val =
T.v
F.val =
*
al
F.v
=
al
digit.lexval = digit.lexval =
digit.le
= =
xval

rvore de 3 * 5 + 4
decorada
E.val =

E.val =
T.val =

+ T.val =

F.val =
T.v
F.val =
*
al
F.v
=
al
digit.lexval = 5 digit.lexval = 4
digit.le
= =
xval
3

rvore de 3 * 5 + 4
decorada
E.val =

E.val =
T.val =
T.v
al
F.v
=
al
digit.le
= 3=
xval
3

F.val = 5
*

+ T.val =
F.val = 4

digit.lexval = 5 digit.lexval = 4

rvore de 3 * 5 + 4
decorada
E.val =

E.val =
T.val =
T.v
al
F.v
=3
al
digit.le
= 3=
xval
3

F.val = 5
*

+ T.val = 4
F.val = 4

digit.lexval = 5 digit.lexval = 4

rvore de 3 * 5 + 4
decorada
E.val =

E.val =
T.val = 15
T.v
al
F.v
=3
al
digit.le
= 3=
xval
3

F.val = 5
*

+ T.val = 4
F.val = 4

digit.lexval = 5 digit.lexval = 4

rvore de 3 * 5 + 4
decorada
E.val =

E.val = 15
T.val = 15
T.v
al
F.v
=3
al
digit.le
= 3=
xval
3

F.val = 5
*

+ T.val = 4
F.val = 4

digit.lexval = 5 digit.lexval = 4

rvore de 3 * 5 + 4
decorada
E.val = 19

E.val = 15
T.val = 15
T.v
al
F.v
=3
al
digit.le
= 3=
xval
3

F.val = 5
*

+ T.val = 4
F.val = 4

digit.lexval = 5 digit.lexval = 4

rvore de 3 * 5 + 4
decorada
Note a direo da avaliao
dos
E.val = 19

atributos

E.val = 15
T.val = 15
T.v
al
F.v
=3
al
digit.le
= 3=
xval
3

F.val = 5
*

+ T.val = 4
F.val = 4

digit.lexval = 5 digit.lexval = 4

Atributos herdados
teis para especificar contexto
Por exemplo se um identificador usado
em uma expresso definido no
contexto de uso

sempre possvel trabalhar apenas


com atributos sintetizados
Porm, definies
elaboradas

tornam-se

mais

Exemplo Declarao de
Tipos
Produo

Regra semntica

DgTL
T
g int
Tg
real
L g L1
, id
LAtributo
g id

L.in = T.type
T.type = integer
T.type = real
L1.in = L.in
addtype(id.entry,
L.in)

type
sintetizado e atribuite
in herdado

rvore de real id1, id2, id3 decorada


D

DgTL
T g int
Tg

T.type = real

L.in = real

real
L.in = real

L.in = real
id1

,
id2

id3

real
L g L1 , id
Lg
id

L.in = T.type
T.type = integer
T.type = real
L1.in = L.in
addtype(id.entry,
L.in)

rvore de real id1, id2, id3Direo


decorada
da
avaliao
do
atributo
in
L.in = real
(Herdado)

T.type = real
real

Direo da
avaliao
do
atributo
type

L.in = real

L.in = real
id1

,
id2

id3

Exerccio
Adicione aes na gramtica abaixo
para construo de rvore sintticas
Eg
Eg
Tg
Tg
Tg

E1 + T
T
(E)
id
num

Funes auxiliares
semnticas:

mknode(op, left, right)


mkleaf(id, entry)
mkleaf(num, val)

Exerccio
Produo

Eg
Eg
Tg
Tg
Tg

E1 + T
T
(E)
id
num

Regra semntica

E.x = mknode(+, E1.x, T.x)


E.x = T.x
T.x = (E.x)
T.x = mkleaf(id, id.entry)
T.x = mkleaf(num, num.val)

Grafos de Dependncia
Se um atributo b a um n da rvore gramatical
depender de um atributo c, a regra semntica
de c deve ser avaliada antes da regra
semntica de b, ou seja, o atributo b para
ser computado depende do valor do
atributo c.
As dependncias entre valores dos atributos
herdados/sintetizados dos ns de uma rvore
de derivao podem ser representadas em um
grafo denominado grafo de dependncia

Grafos de Dependncia
teis para determinar a ordem de
avaliao dos atributos:
1. Gerar grafo de dependncia
2. Fazer sort topolgico ordenao dos
ns de um grafo acclico dirigido em
que todas as arestas vo de um n
anterior para ns posteriores.

Grafos de Dependncia
Exemplo (soma):
Produo
E -> E1 + E2

Regra Semntica
E.val = E1.val + E2.val

E.Val sintetizado a partir de E1.val


e E2.val

Grafos de Dependncia
Exemplo (declarao de variveis):
Decl

type dtype

var-list dtype

real
Id (x) dtype

Var-list dtype

Id (y) dtype

Grafos de Dependncia
Exemplo (declarao de variveis):
Decl

type dtype

var-list dtype

real
Id (x) dtype

Var-list dtype

Id (y) dtype

Grafos de Dependncia
Exemplo (declarao de variveis):
Decl

type dtype

var-list dtype

real
Id (x) dtype

Var-list dtype

Id (y) dtype

rvore Sinttica
A rvore sinttica uma representao
intermediria que pode ser construda
por definies dirigidas pela sintaxe
Uma rvore sinttica (abstrata) uma
forma condensada da rvore gramatical
na qual:
Operadores e palavras chaves no
aparecem como folhas, mas como ns
interiores da rvore

rvore Sinttica

rvore Gramatical
Condensada

rvore Sinttica

rvore Sinttica
Exerccio: Construir uma rvore
gramatical e uma rvore sinttica
para a produo
S if B then S1 else S2

rvore Sinttica

rvore Sinttica

possvel gerar tambm, rvores em


estruturas de dados.

rvore Sinttica
Exerccio 2: Gere a rvore sinttica e
a estrutura de dados para a
expresso
a4+c

rvore Sinttica

DVIDAS