Вы находитесь на странице: 1из 30

Anlisis Semntico.

Procesadores de Lenguaje I

Anlisis Semntico
Introduccin
Semntica dirigida por sintaxis

Gramticas de Atributos
Ejemplos

Evaluacin de gramticas

Grafo de Dependencias
Mtodos de evaluacin con anlisis sintctico
Gramticas SA y LA
TDS y ETD
Evaluacin Descendente con Analizador LL
Evaluacin Ascendente con Analizador LR
1

Anlisis Semntico. Procesadores de Lenguaje I

Anlisis Semntico
Extensin del anlisis sintctico para la
comprensin del programa

Comprobar que tiene sentido


Previo a su traduccin

Las gramticas independientes del contexto (G2) no


son suficientes para realizar el anlisis semntico.

Comprobaciones de larga distancia en el rbol (contexto)


Es necesario definir un tipo de gramtica ms rica como las
gramticas de atributo: modelo de flujo de datos

Esta fase modifica la tabla de smbolos y suele estar


mezclada con la generacin de cdigo (traduccin)

Destaca la verificacin de tipos


2

Anlisis Semntico. Procesadores de Lenguaje I

Anlisis Semntico
Comprobaciones adicionales (estticas)
Comprobacin de tipos

La aplicacin de los operadores y operandos deben ser

compatibles

Comprobaciones de unicidad

Hay situaciones en los que un objeto solo puede definirse una

vez exclusivamente. Las etiquetas de una sentencia case no


deben repetirse, declaraciones de objetos,

Comprobaciones relacionadas con nombres

El mismo nombre debe aparecer dos o ms veces. Ej.:

variables en funciones,

Comprobaciones del flujo del control

Las proposiciones que hacen que se abandone el flujo del

control de una construccin debe transferirse a otro punto.


(break, exit ...)
3

Anlisis Semntico. Procesadores de Lenguaje I

El Analizador Semntico
Semntica dirigida por sintaxis
Autmata a pila
(Gramtica independiente
del contexto)
+
Acciones Semnticas

Cadena
De entrada

rbol de Anlisis
Sintctico

Grafo de
Dependencias

Semntica
Dirigida por
Sintaxis

Orden de Evaluacin
de las reglas Semnticas
4

Anlisis Semntico. Procesadores de Lenguaje I

Semntica dirigida por sintaxis


Definicin

Las gramticas de atributo son gramticas G2 a las que se aaden


atributos y reglas de evaluacin de atributos (reglas semnticas)
Cada atributo es una variable que representa una propiedad de un
elemento del lenguaje
Habitualmente para cada smbolo X (terminal o no terminal)
Ej: X.Tipo, X.Valor, ...
Puede ser una cadena, nmero, tipo, posicin de memoria, etc

Reglas semnticas

Se asocian a las producciones sintcticas.


Ecuaciones de atributo (caso particular): slo funcin de atributos
de smbolos en la produccin
Adems existen condiciones semnticas que se ejecutan sobre
estos atributos

Anlisis Semntico. Procesadores de Lenguaje I

Semntica dirigida por sintaxis


Efectos de las acciones semnticas

Clculo de valores de atributos


Guardar/Consultar informacin de la Tabla de Smbolos (variable
global)

Generacin de cdigo

Notificacin de mensajes de error

No es un proceso estndar como el anlisis sintctico

Vara de un lenguaje a otro

Valores de atributos:

cada produccin A= se asocia con un conjunto de acciones


semnticas representadas como una funcin:

X.atr=f (Y1.atr, ..., Yn.atr)

Tambin se conocen estas acciones como ecuaciones de atributos


6

Anlisis Semntico. Procesadores de Lenguaje I

Gramticas de Atributos
Unin de gramtica con atributos y reglas semnticas

Generar y transportar info: rboles anotados (o adornados)


Las relaciones entre atributos de cada accin semntica solo entre
smbolos de la produccin
error
S
A1

A2

Notaciones

A3

B1

Definicin dirigida por la sintaxis (DDS)

B2
error

B3
C1

Acciones asociadas a cada produccin (sin orden especificado)

C2

Esquema de Traduccin (ETDS)


Acciones intercaladas en cada momento. Notacin para implementar un

traductor

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo 1
Evaluacin de
Expresiones numricas
E::= E+T
E::= T
T::= T*F
T::= F
F::= num

1 atributo: val
Acc. sem.: op aritm.
Sentencia: 7+8*3

E
E.val=31
E
E.val=7

T
T.val=7

T
T.val=8

F
F.val=7

F
T.val=8

num=7

num=8

Lxico:
num + num * num
Sintctico: E+TE+T*F
Semntico: valor: 31

T
T.val=24

F
F.val=3

num=3

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo 1. DDS
Ejemplo (calculadora):
produccin

Acciones semnticas

E::= E+T

E0 .val =E1 .val +T.val

E::= T

E.val =T.val

T::= T*F

T0 .val =T1 .val *F.val

T::= F

T.val =F.val

F::= num

F.val =num.val

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo 2

S
cod=var a,b,c: real

Traductor C->Pascal
S::=T id L ;
L::= , id L |
T::= float | int

T
cod=: real

;
id
L
cod=a cod=,b,c cod=

float
cod=float

,
id
L
cod= cod=b cod=,c

1 atributo: cdigo
Acc. sem.: concatenar

id
,
L
cod= cod=c cod=

Sentencia: float a,b,c;


Resultado: var a,b,c: real

cod=
10

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo 2. DDS
Ejemplo (traductor C->Pascal):
produccin

Acciones semnticas

S::= T id L ;

S.cod =var || id.cod || : ||


T.cod

L::= , id L

L0.cod = , || id.cod || L1.cod

L::=

L.cod =

T::= float

T.cod = real

T::= int

F.cod = int

(|| representa concatenar)


11

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo 3
E
v=141

Valor numrico decimal/octal


E::=N base
N::= N D | D
base::=o |
D::= 0|1||9

b=8

b=8

2 atributos:
base, valor
Acc. sem.: aritmtica
Sentencia: 215o
Resultado: 141

N
v=17*8+5

N
v=2*8+1

base
o

D
v=5
5

b=8 N
v=2
D
v=2
2

D
v=1
1

12

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo 3. DDS
Ejemplo (nmeros enteros/octales):
produccin

Acciones semnticas

E::= N base

E.base=base
E.val=N.val

N::= N D

N1.base=N0.base
N0.val =
N1.val*N1.base +D.val

N::= D

N.val = D.val

D::= 0

D.val = 0

D::= 1

D.val = 1

D::= 9

D.val = 9

13

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo 4
Traductor infija->postfija
E::=T E
E::= op T E
E::=
T::= num

1 atributo: cdigo
Acc. sem.: concatenar
Sentencia: 9-5+2
Resultado: 9 5 2 +

E
cod=9
E
T
cod=9 cod=9 5 -
num
9
E
operador T
cod=5 cod=9 5 2 +
num
5
E
operador
T
+
cod=2 cod=
9 5 2 +

num
2

14

Anlisis Semntico. Procesadores de Lenguaje I

Gramticas de Atributos. DDS


Dos tipos de atributos

S
S.s

Sintetizados
El valor a asignar a un nodo depende

del valor de los nodos hijos

A
A.x

B
B.x

C
C.x

S.s=f(A.x, B.x, C.x)

Heredados

S
S.x

Se pasan a niveles inferiores del rbol.

Su valor depende del valor de los


hermanos y del padre

A
A.x

B
B.h

C
C.x

B.h=g(A.x, B.x, C.x)

El atributo mantiene el carcter en toda la gramtica


Los tokens slo tienen atributos sintetizados
15

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin de la gramtica
Evaluacin de los atributos (anotacin)

Mtodos Dinmicos
Anlisis con Grafo de Dependencias
El orden se obtiene de un ordenamiento topolgico de los

nodos, en funcin de las dependencias en el grafo


Se realiza en el momento de compilacin: depende del
programa
Si hay ciclos no funciona (anlisis gramticas circulares)

Mtodos Estticos
Orden de evaluacin se decide en tiempo de construccin del

compilador

Mtodos basados en reglas, las acciones semnticas asociadas

con las producciones se analizan a mano

Mtodos de una pasada: simultneamente con el anlisis

sintctico: No necesitan el rbol sintctico

16

Anlisis Semntico. Procesadores de Lenguaje I

Grafos de Dependencias
Los atributos no pueden evaluarse en
cualquier orden

Si un atributo b depende de un atributo c,


entonces se debe evaluar la regla semntica para
b despus de la regla semntica que define a c

Las interdependencias entre atributos


heredados y sintetizados de un rbol de
anlisis sintctico se pueden representar
mediante un grafo dirigido llamado Grafo de
Dependencias
17

Anlisis Semntico. Procesadores de Lenguaje I

Grafos de Dependencias
Creacin: cada produccin A->X1...Xn define una parte del
grafo, se construye a partir de la cadena concreta
1. Se crea un nodo por cada atributo Xi.aj de cada smbolo de la
produccin
Los atributos heredados van a la izquierda y los sintetizados
a la derecha
2. Para cada regla semntica Xi.aj=f(..., Xk.al,...) se hacen arcos
desde cada nodo Xk.al hacia el nodo Xi.aj
Esto se repite para cada k y l afectados por la regla

Ejemplo:
Produccin
EE+E

Regla Semntica
E0.val:=E1.val+E2.val

E val
E1 val +

E2 val
18

Anlisis Semntico. Procesadores de Lenguaje I

Grafos de Dependencias
traductor decl Pascal->C:
produccin

cs

Var L : T

Acciones semnticas

th cs

S::= var L : T; L.th=T.ts

cs

th L cs

S.cs=L.cs
L::= L, id

L0.cs = L1.cs ||L0.th||id.valex||;


L1.th= L0.th

L::=id

L.cs =L.th||id.valex||;

T::= real

T.ts = float

T::= integer

T.ts = int

id

th cs
th

Atributos:

valex
cs

L
id

valex

S: S.cs (cdigo sintetizado)

L: L.th (tipo heredado), L.cs (cdigo sintetizado)

T: T.ts (tipo sintetizado)

19

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo Grafo de Dependencias


traduccin: var a,b: integer;

int a; int b;

(aparecer en atributo S.cs)


S cs
Var
4

int

th

L
5

int

cs

, id
cs

th

6
valex

integer

int a;
1

valex

id

int a; int b

cs 3

int a; int b
int
Orden topolgico de
evaluacin

En general puede haber


varios rdenes topolgicos
20

10

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin
Diseo esttico del orden de recorrido
Atributos heredados
de A

Atributos sintetizados
de A

Reglas de
evaluacin de
atributos

her.

sint.

her.

sint.

her.

sint.
21

Anlisis Semntico. Procesadores de Lenguaje I

Creacin del rbol Sintctico


Abstracto (ASA)
Si no se puede evaluar la gramtica al tiempo que se hace el
anlisis sintctico
Evaluacin en varias pasadas:
construir el rbol explcitamente (con una DDS)
evaluacin en funcin del orden de recorrido (grafo de
dependencias)
rbol sintctico abstracto
Estructura de datos que condensa un rbol de anlisis
sintctico

Los operadores y las palabras clave


No son hojas
Estn asociadas con el nodo padre de dichas hojas
22

11

Anlisis Semntico. Procesadores de Lenguaje I

Creacin del rbol Sintctico


Abstracto (ASA)
rboles sintcticos (parse tree)
E

+ E

E
E

num

if

then

else

num

num

rboles de sintaxis abstractos (sintax tree)


+

if-then-else

num

num

num

23

Anlisis Semntico. Procesadores de Lenguaje I

rboles de Sintaxis Abstracta


Son rboles de derivacin en los que no existe
informacin superflua
Cada nodo hoja representa un operando y cada nohoja un operador
Ejemplos

E
T
F
A

rbol

ASA

T
F
B

S:=A+B*C

IF A<B THEN X:=B

:=
B

A[I]:=B
:=

IF
+

<
*

:=
B

[]
B

B
I

C
24

12

Anlisis Semntico. Procesadores de Lenguaje I

Orden de recorrido del rbol


Orden dinmico: construccin del grafo de
dependencias en tiempo de compilacin y clculo del
orden topolgico
Orden esttico: anlisis de la gramtica de las
dependencias y orden de evaluacin

Sobre el rbol de atributros


Recorrido pre-orden: heredados
Recorrido post-orden: sintetizados
Recorrido combinados: sintetizados depende heredados
Recorridos de varias visitas: heredados dependen sintetizados

Sin necesidad de rbol de atributos: gramticas de una


pasada: S-A y L-A
25

Anlisis Semntico. Procesadores de Lenguaje I

Gramticas Evaluables durante


Anlisis Sintctico
Gramticas de Atributos Sintetizados (S-A Grammars)

Slo existen atributos sintetizados


A.s, p:A->X1X2...Xn :
A.s=f(X1.s, X2.s, , Xn.s)

Informacin fluye hacia arriba

Gramticas de Atributos por la Izquierda (L-A Grammars)

En una gramtica de atributos por la izquierda, todo atributo heredado


de cualquier produccin:
Xi.h, en 1i=n en p:A->X1X2...Xn depende slo de:
1. Atributos de smbolos por la izquierda: Xj, 1j<i
2. Atributos heredados de A

La informacin nunca fluye de derecha a izquierda

Permiten evaluacin durante el Anlisis Sintctico

Notacin: Esquemas de Traduccin

26

13

Anlisis Semntico. Procesadores de Lenguaje I

Gramticas L-atribudas, S-atribudas


Evaluacin durante el Anlisis Sintctico

No se precisa un rbol explcito (toda la informacin


necesaria en el nodo recorrido)

L-atribuda

S-atribuda
27

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo gramtica No L-Atribuda


Valor nmerico decimal/octal
Produccin Acciones semnticas
E N base {N.base=base.b
E.val=N.val}
N N D
{N1.base=N0.base
N0.val =
N1.val*N1.base +D.val}
N D
{N.val = D.val}
D0
{D.val = 0}
D1
{D.val = 1}

D 9
{D.val = 9}

b=8

b=8

N
base
v=17*8+5
o

N
D
v=2*8+1 v=5
5

b=8

Sentencia: 215o; Resultado: 141

E
v=141

N
v=2

D
v=1

D
v=2
2

1
28

14

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin de gramticas Latribudas, S-atribudas en An. Sint.


Gramticas de Atributos Sintetizados (S-A)

Analizadores descendentes:
Las LL(1) pueden evaluarse con analizadores LL(1) y

descenso recursivo
Si tienen recursividad a izquierda, puede extenderse la

transformacin de gramtica a atributos, y utilizar un


analizador descendente

Analizadores ascendentes
Las LL(1) y las LR(1) pueden evaluarse con analizadores

LR(1). Uso de una pila semntica

29

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin de gramticas Latribudas, S-atribudas en An. Sint.


Gramticas de Atributos por la Izquierda (L-A)

Analizadores descendentes
Pueden evaluar todas las LL(1) con atributos por la izquierda
Transformacin de rec. izda. no vlida con atributos

heredados

Analizadores ascendentes
En principio no son adecuados para calcular atributos

heredados (?)
Transformaciones posibles: inclusin de marcadores para

insertar acciones intermedias y eliminacin de atributos


heredados

Vlido para todos las gramticas LL(1), y para algunas LR(1)

Alternativa: transformacin de la gramtica


30

15

Anlisis Semntico. Procesadores de Lenguaje I

Esquema de Traduccin (ETDSs)


Es una notacin para hacer un traductor
Las acciones semnticas se intercalan con los
smbolos del consecuente de la produccin

X::=ab {accion();} b

Orden de evaluacin fijo


Dos tipos

ETDS slo con atributos sintetizados


Acciones al final de la produccin

ETDS con atributos sintetizados y heredados


Atributos heredados de un smbolo del consecuente
Atributos sintetizados del antecedente

31

Anlisis Semntico. Procesadores de Lenguaje I

Esquema de Traduccin (ETDSs)


Restricciones sobre un ETDS

Un atributo heredado para un smbolo en el lado derecho de una


produccin se calcular en una accin antes que dicho smbolo
A->1 . B 2
{B.h=f(...)}
Una accin no debe referirse a un atributo sintetizado de un
smbolo que est a la derecha de sta
A->12 {2.s= f(3.s)} 3
Un atributo sintetizado para el no terminal de la izquierda slo
puede calcularse despus de que se hayan calculado todos los
atributos a los que hace referencia. (Tpicamente al final)
A->12 {A.s= f(1.s, 2.s, 3.s)} 3

32

16

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo ETDS
El siguiente ETDS no cumple los criterios:
S::= AA
A::= a

{A1.her=1; A2.her=2}
{imprimir(A.her)}

Modificacin:
S::=
A
A
A::= a

{A1.her=1;}
{A2.her=1;}
{imprimir(A.her)}

33

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo ETDS
Ejemplo

Atributo heredado: informacin de tipo


Produccin
DT
L
Tint
Tfloat
L
L, id

Reglas semnticas
{L.her := T.tipo}

Lid

{aadetipo (id.lex, L.her)}

{T.tipo := integer}
{T.tipo := real}
{L1.her := L0.her}
{aadetipo (id.lex, L.her)}

34

17

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo ETDS
Ejemplo con
atributos
heredados:
flujo horizontal
y descendente

float a,b,c;

T
L
T.tipo=r L.her=r

float

,
L
L.her=r

aadeTipo(c,real)

,
L
F.val=3

aadeTipo(c,real)

id

id

id

aadeTipo(c,real)

35

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin Descendente de Gramticas


con Atributos por la Izquierda
Con gramticas L-atribuidas se puede efectuar la evaluacin durante
el anlisis sintctico: orden de evaluacin de atributos es el de
creacin de nodos en el rbol sintctico
No se precisa crear rbol, se utiliza un recorrido recursivo como en el
analizador descendente recursivo
Evaluacin: cada funcin asociada a cada no terminal recibe como
argumentos los atributos heredados y devuelve los atributos
sintetizados (es importante el orden)
Evaluar(Nodo: T, T.h): devuelve T.s
Para cada hijo de T: Ci
calcula atributos heredados Ci.h=g(Cj.h,Cj.s,T.h)
Ci.s=evaluar(Ci, Ci.h)

devolver T.s=f(Cj.h,Cj.s)
36

18

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin Descendente
Eliminar recursin por la izquierda en ETDS

Cada produccin recursiva se elimina con la transformacin:


A->AY
A->XA
A->X
A->YA
A->
Extensin para su aplicacin a atributos sintetizados
A->AY {A0.a=g(A1.a, Y.y)}
A->X
{A.a=f(X.x)}
A->X
A
A->Y
A
A->
A tendr

{A.h=f(X.x)}
{A.a=A.s}
{A1.h=g(A0.h,Y.y)}
{A0.s=A1.s}
{A.s=A.h}
37
un par de atributos (s,h) por cada sintetizado a original A.a

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin Descendente
Ejemplo
E::= E + T {E0 .val =E1 .val +T.val}
E::= T
{E.val =T.val}
T::= num {T.val =num.val}

Transformacin:
E::= T
E
E::= +
T
E
E::=
T::= num

{R.h =T.val}
{E.valor=E.s}
{E1.h =T.val+ E0.h}
{E0.s = E1.h}
{E.s =E.h}
{T.val =num.val}
38

19

Anlisis Semntico. Procesadores de Lenguaje I

Gramtica Original
E

9+5+2

E
val
14
E
val
9

T
val
9
num
9

val
16

+ T
val
2
num
2

+ T
val
5
num
5

39

Anlisis Semntico. Procesadores de Lenguaje I

Con Evaluacin Descendente


E

9+5+2

T
val
9
num
9
+

s
16

E
h s
9 16
T
val
5
num
5

E
h s
14 16
+

T
E
val h s
2 16 16
num
2

40

20

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin Ascendente de Gramticas con


Atributos Sintetizados
Evaluacin muy frecuente (herramientas LALR:yacc/bison, jcup)
Los atributos sintetizados se pueden evaluar con un analizador
sintctico ascendente segn la entrada es analizada
La pila de estados LR tiene asociados los smbolos gramaticales.
Basta crear otra pila con los valores de los atributos sintetizados
asociados a stos, pila semntica: val
Con cada reduccin se calculan los nuevos atributos sintetizados
accediendo en la pila a los atributos de smbolos gramaticales
del lado derecho de la produccin
Produccin

Acciones
semnticas

A::= XYZ

A.s=f(X.x,Y.y,Z.z)

Pila LR

val

...

...

cima

Z.z

val [cima]

cima-1

Y.y

val [cima 1]

cima-2

X.x

val [cima-2]
41

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin Ascendente de Definiciones


con Atributos Sintetizados
Ejemplo:

Produccin

Fragmento de Cdigo

SE n

print (val [cima])

EE1 + T

ncima=cima-2
val [ncima] := val [cima-2] + val [cima]
cima=ncima

ET

Acciones
ejecutadas tras
cada reduccin

TT1 * F

ncima=cima-2
val [ncima] := val [cima-2] val [cima]
ncima=cima

TF
F( E )

Fdgito

ncima=cima-2
val [ncima] := val [cima-1]
cima=ncima
42

21

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin Ascendente de Gramticas LA


Todas las gramticas con atributos por la izquierda
anteriores eran LL(1). Se pueden hacer transformaciones
y extender a analizadores ascendentes para cubrir
muchas gramticas LR(1) con atributos por la izquierda
Extensin con smbolos marcadores
Eliminacin de acciones intercaladas
Herencia de atributos en la pila del analizador sintctico

(simulacin de la evaluacin de atributos heredados)

43

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin Ascendente: Eliminacin de


acciones intercaladas en un ETDS
Cuando no hay atributos heredados, la transformacin es
inmediata:
A->X1Xj-1 {accion} Xj
A->X1Xj-1MXj
M-> {accion}
Ej:
E::=T E
E::=+ T {escribe +} E
E::= - T {escribe -} E
E::=
T::= num {escribe num.lex}

E::=T E
E::= + T M E
E::= - T N E
E::=
T::= num {escribe num.lex}
M::= {escribe +}
N::= {escribe - }
44

22

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin Ascendente: Herencia de


atributos heredados en la pila semntica
Se introducen marcadores por cada smbolo con atributo
heredado:
A->X1Xn

A->M1 X1MnXn (si todo Xi tiene atrib heredado)

Todo atributo heredado est en el sintetizado del marcador


A->X1Xj-1 { Xj.h=f(A.x,X1.x,,Xj-1.x) }
Xj
pasa a:
A->X1Xj-1Mj Xj
Mj->
{ Mj.s=f(A.x,X1.x,,Xj-1.x) }

desaparecen las acciones con atributos heredados (su valor est en el


atributo del marcador a la izquierda)
el clculo de los nuevos marcadores es en realidad acceder a posiciones
conocidas de la pila (cada marcador est en una sola regla)
45

Anlisis Semntico. Procesadores de Lenguaje I

Herencia de atributos heredados en pila


semntica con analizador ascendente
En la pila slo hay atributos sintetizados
Todos los atributos heredados estn en posiciones predecibles en
la pila (incluyendo el de la parte izquierda)

cima
cima -1

Estado

Val

...

...

Xn
Mn

Xn.s
Mn.s

X1
M1

X1.s
M1.s

??

??

A->M1 X1 MnXn
val [cima]
val [cima1]

Aqu aparece A.h (se


demuestra por induccin)

46

23

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo de herencia de atributos


heredados en pila
Ejemplo 2

Atributo heredado: informacin de tipo


Produccin
DT M L
M
Tint
Tfloat
L L, id

Reglas semnticas

{}
{tipo_act=T.tipo} OJO: no cumple DDS
{T.tipo := integer}
{T.tipo := real}
{aadetipo (id.lex, L0.her)}

Lid

{aadetipo (id.lex, L.her)}


47

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo 2 de herencia de atributos


heredados en pila
Implementacin con la pila semntica val:
Reglas

D::=TML
M::=
T::=int
T::=float
L::=id
L::=L,id

Cdigo

{ncima=cima-2;
cima=ncima;}
{ncima=cima+1;
val[ncima]=val[cima];
cima=ncima;}
{val[cima]=integer;}
{val[cima]=float;}
{aadeTipo(id.lex,val[cima-1]);
{ncima=cima-2
aadeTipo(id.lex,val[cima-3]);
cima=ncima;}

48

24

Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin Ascendente de Gramticas LA


Dos limitaciones en los ETD y analizadores LR:
Hay que poder acceder a posiciones debajo de la pila
La inclusin de marcadores puede llevar a gramticas
no LR (1)
SA
SB
Bab M cd
Aab N cde
M {accion1}
N {accion2}

SA
SB
Bab{accion1}cd
Aab{accion2}cde

No LR(1)

LALR(1)

49

Anlisis Semntico. Procesadores de Lenguaje I

Eliminacin de atributos heredados


con modificacin de gramtica
(Knuth,1968): Toda gramtica con atributos heredados se puede
modificar a gramtica con sintetizados
Ej.: Gramtica no L-atribuida (Pascal)
produccin

Acciones semnticas

S::= var L : T;

L.th=T.ts

L::= L, id

L1.th= L0.th
aadirTipo(id.valex, L0.th)

L::=id

aadirTipo(id.valex, L.th)

T::= real

T.ts = float

T::= integer

T.ts = int

Atributos:

L: L.th (tipo heredado), T: T.ts (tipo sintetizado)


50

25

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo modificacin gramtica


gramtica SA para hacer lo mismo (Pascal):
Produccin

Acciones semnticas

S::= var L ;
L::= id , L

aadirTipo(id.lex, L1.ts)
L0.ts=L1.ts

L::= id : T

aadirTipo(id.lex, T.ts)
L.ts=T.ts

T::= real

T.ts = float

T::= integer

T.ts = int

Atributos:
L: L.ts (tipo sintetizado), T: T.ts (tipo sintetizado)
51

Anlisis Semntico. Procesadores de Lenguaje I

Eliminacin de atributos heredados


con modificacin de gramtica
Ej.: Gramtica L-atribuida (C)
produccin

Acciones semnticas

S::= T L;

L.th=T.ts

L::= L, id

L1.th= L0.th
aadirTipo(id.valex, L0.th)

L::=id

aadirTipo(id.valex, L.th)

T::= float

T.ts = real

T::= int

T.ts = int

Atributos:

L: L.th (tipo heredado), T: T.ts (tipo sintetizado)

Versin gramtica SA?

52

26

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo Anlisis Semntico


E
v=141

Valor nmerico decimal/octal


Gramtica NO L-A
E::=N base
N::= N D | D
base::=o |

N
OK

b=8

b=8

3 atributos:

N
ERROR

base
o

D
v=5
5

base, valor, posicion

b=8 N
OK

Acc. sem.: comprobar

D
v=8
8

D
v=2
2

Sentencia: 285o
Resultado: error digito 2

Versin gramtica SA?

53

Anlisis Semntico. Procesadores de Lenguaje I

rboles de Sintaxis Abstracta


Son rboles de derivacin en los que no existe
informacin superflua
Cada nodo hoja representa un operando y cada nohoja un operador
Ejemplos

E
T
F
A

rbol

ASA

T
F
B

S:=A+B*C

IF A<B THEN X:=B

:=
B

A[I]:=B
:=

IF
+

<
*

:=
B

[]
B

B
I

C
54

27

Anlisis Semntico. Procesadores de Lenguaje I

Creacin del rbol Sintctico


Abstracto (ASA)
Construccin

Un nodo para cada operador y cada operando


Los hijos de un nodo operador son las races de
los nodos que representan las subexpresiones que
constituyen los operandos de dicho operador

Funciones auxiliares

hazNodo (operador, izquierda, derecha)


hazHoja (id, entrada)
hazHoja (num, val)

55

Anlisis Semntico. Procesadores de Lenguaje I

Creacin del rbol Sintctico


Abstracto (ASA)
DDS para construir rboles sintcticos

Definicin con atributos sintetizados para construir un rbol


sintctico para una expresin con operadores + y

Utiliza

Creacin de nodos: HazNodo y HazHoja


Atributo sintetizado apn: conserva los punteros creados en
llamadas a las funciones
PRODUCCIN

REGLAS SEMNTICAS

E E1 + T

E.apn := hazNodo (+, E1.apn, T.apn)

E E1 - T

E.apn := hazNodo (-, E1.apn, T.apn)

ET

E.apn := T.apn

T(E)

T.apn := E.apn

T id

T.apn := hazHoja (id, id.entrada)

T num

T.apn := hazHoja (num, num.val)

56

28

Anlisis Semntico. Procesadores de Lenguaje I

Creacin del rbol Sintctico


Abstracto (ASA)
Ej. (construccin ascendente): a 4 + c
E
E
E
T

apn

apn

apn

apn

id

apn

puntero
(implementacin)

num

apn

dependencia entre
atributos apn

id

+
id c

num

id a

57

Anlisis Semntico. Procesadores de Lenguaje I

Grafos Acclicos para expresiones


Grafos de expresiones

Se identifican subexpresiones comunes (bsqueda en rbol)


Cada nueva ocurrencia de la subexpresin
No genera un nuevo subrbol
Referencia al subrbol ya existente o lo crea si no existe

Ej.: a * (b c) + (b c)
rbol sintctico
+
-

*
a

grafo acclico
+

b
c

*
c

58

29

Anlisis Semntico. Procesadores de Lenguaje I

Utilizacin frecuente de atributos en


compiladores convencionales
Verificacin de tipos: atributos
sintetizados/heredados
Traduccin de expresiones aritmticas y
booleanas: atributos sintetizados
Traduccin de estructuras de flujo de control:
atributos heredados

59

30