Sei sulla pagina 1di 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

1
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)
Semntica
+ Dirigida por
Sintaxis
Acciones Semnticas

Cadena rbol de Anlisis Grafo de Orden de Evaluacin


De entrada Sintctico Dependencias de las reglas Semnticas

2
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
5
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

3
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 A3

Notaciones B1 B2 B3
error
Definicin dirigida por la sintaxis (DDS)
C1 C2
Acciones asociadas a cada produccin (sin orden especificado)

Esquema de Traduccin (ETDS)


Acciones intercaladas en cada momento. Notacin para implementar un
traductor 7

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo 1 E
E.val=31
Evaluacin de
Expresiones numricas
E T
+
E.val=7 T.val=24
E::= E+T
E::= T
T::= T*F T T F
T::= F T.val=7 T.val=8 *
F.val=3
F::= num

1 atributo: val F F num=3


F.val=7 T.val=8
Acc. sem.: op aritm.
Sentencia: 7+8*3 num=7 num=8
Lxico: num + num * num
Sintctico: E+TE+T*F
Semntico: valor: 31 8

4
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 ; id L ;
T
L::= , id L | cod=: real cod=a cod=,b,c cod=
T::= float | int

float , id L
cod=float cod= cod=b cod=,c
1 atributo: cdigo
, id L
Acc. sem.: concatenar cod= cod=c cod=

Sentencia: float a,b,c;



Resultado: var a,b,c: real cod=
10

5
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
Valor numrico decimal/octal v=141
E::=N base
N::= N D | D b=8 N base
base::=o | v=17*8+5
o
D::= 0|1||9
b=8 N D
2 atributos: v=2*8+1 v=5
5
base, valor
b=8 N D
Acc. sem.: aritmtica v=2 v=1
Sentencia: 215o D 1

Resultado: 141 v=2


2

12

6
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
E
Traductor infija->postfija cod=9
E::=T E
E::= op T E T E
E::= cod=9 cod=9 5 -
T::= num num
9
operador T E
- cod=5 cod=9 5 2 +
1 atributo: cdigo num
5
operador T E
Acc. sem.: concatenar + cod=2 cod=
Sentencia: 9-5+2 9 5 2 +
num
Resultado: 9 5 2 + 2

14

7
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 A B C
del valor de los nodos hijos A.x B.x C.x
S.s=f(A.x, B.x, C.x)

Heredados S
Se pasan a niveles inferiores del rbol. S.x
Su valor depende del valor de los A B C
hermanos y del padre A.x B.h 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

8
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 Regla Semntica E val
EE+E E0.val:=E1.val+E2.val

E1 val + E2 val
18

9
Anlisis Semntico. Procesadores de Lenguaje I

Grafos de Dependencias S cs

traductor decl Pascal->C: Var L : T


produccin Acciones semnticas
th cs cs
S::= var L : T; L.th=T.ts
th L cs
S.cs=L.cs
L::= L, id L0.cs = L1.cs ||L0.th||id.valex||; L , id
L1.th= L0.th
L::=id th cs valex
L.cs =L.th||id.valex||;
th cs
T::= real T.ts = float
L
T::= integer T.ts = int
Atributos: id
valex
S: S.cs (cdigo sintetizado)
L: L.th (tipo heredado), L.cs (cdigo sintetizado)
19
T: T.ts (tipo sintetizado)

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 8 int a; int b

7 int a; int b
Var L : T
th cs
4 int
cs 3 int
L , id integer
Orden topolgico de
5 int th cs valex 2 b
evaluacin
6 int a; En general puede haber
id varios rdenes topolgicos
valex 1 a 20

10
Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin
Diseo esttico del orden de recorrido

Atributos heredados Atributos sintetizados


de A
A de A

Reglas de
evaluacin de
atributos

her. B sint. her. C sint. her. D 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 S

E + E if B then S else S
num E * E

num num

rboles de sintaxis abstractos (sintax tree)


+ if-then-else

num * B S S
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 no-
hoja un operador
Ejemplos
rbol ASA S:=A+B*C IF A<B THEN X:=B A[I]:=B
E + := IF :=
E T A B S + < :=
+ [] B
T F A * A B X B A I
F B B C

A 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
E
Produccin Acciones semnticas
v=141
E N base {N.base=base.b
E.val=N.val}
N N D {N1.base=N0.base b=8 N base
N0.val = v=17*8+5
N1.val*N1.base +D.val} o
N D {N.val = D.val}
D0 {D.val = 0} b=8 N D
D1 {D.val = 1} v=2*8+1 v=5

D 9 {D.val = 9} 5

N D
b=8
v=2 v=1

D 1
v=2
Sentencia: 215o; Resultado: 141 2 28

14
Anlisis Semntico. Procesadores de Lenguaje I

Evaluacin de gramticas L-
atribudas, 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 L-
atribudas, 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 {A1.her=1; A2.her=2}
A::= a {imprimir(A.her)}
Modificacin:
S::= {A1.her=1;}
A {A2.her=1;}
A
A::= a {imprimir(A.her)}

33

Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo ETDS
Ejemplo
Atributo heredado: informacin de tipo

Produccin Reglas semnticas


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

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


34

17
Anlisis Semntico. Procesadores de Lenguaje I

Ejemplo ETDS
Ejemplo con D float a,b,c;
atributos
heredados: T L ;
flujo horizontal T.tipo=r L.her=r
y descendente
float L , id
L.her=r aadeTipo(c,real)

L , id
F.val=3 aadeTipo(c,real)

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.h=f(X.x)}
A {A.a=A.s}
A->Y {A1.h=g(A0.h,Y.y)}
A {A0.s=A1.s}
A-> {A.s=A.h}
37
A tendr 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 {R.h =T.val}
E {E.valor=E.s}
E::= +
T {E1.h =T.val+ E0.h}
E {E0.s = E1.h}
E::= {E.s =E.h}
T::= num {T.val =num.val}
38

19
Anlisis Semntico. Procesadores de Lenguaje I

Gramtica Original
E
val
16
9+5+2
E + T
val val
14 2

num
E + T 2
val val
9 5

T num
val
5
9
num
9
39

Anlisis Semntico. Procesadores de Lenguaje I

Con Evaluacin Descendente


E
s
16
9+5+2 T E
val h s
9 9 16
num
9
+ T E
val h s
5 14 16
num
5
+ 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
Pila LR val
Produccin Acciones ... ...
semnticas
cima Z Z.z val [cima]
A::= XYZ A.s=f(X.x,Y.y,Z.z)
cima-1 Y Y.y val [cima 1]
cima-2 X 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
TT1 * F ncima=cima-2
Acciones val [ncima] := val [cima-2] val [cima]
ejecutadas tras ncima=cima
cada reduccin TF
F( E ) ncima=cima-2
val [ncima] := val [cima-1]
cima=ncima
Fdgito 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 M E
E::=T E E::= - T N E
E::=+ T {escribe +} E E::=
E::= - T {escribe -} E T::= num {escribe num.lex}
E::= M::= {escribe +}
T::= num {escribe num.lex} 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)

Estado Val A->M1 X1 MnXn


... ...

cima Xn Xn.s val [cima]

cima -1 Mn Mn.s val [cima1]


X1 X1.s
M1 M1.s
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 Reglas semnticas


DT M L {}
M {tipo_act=T.tipo} OJO: no cumple DDS
Tint {T.tipo := integer}
Tfloat {T.tipo := real}
L L, id {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 Cdigo j
D::=TML {ncima=cima-2;
cima=ncima;}
M::= {ncima=cima+1;
val[ncima]=val[cima];
cima=ncima;}
T::=int {val[cima]=integer;}
T::=float {val[cima]=float;}
L::=id {aadeTipo(id.lex,val[cima-1]);
L::=L,id {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 SA
SB SB
Bab{accion1}cd Bab M cd
Aab{accion2}cde Aab N cde
M {accion1}
N {accion2}

LALR(1) No LR(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
Valor nmerico decimal/octal v=141
Gramtica NO L-A
E::=N base b=8 N base
N::= N D | D OK
base::=o | o

b=8 N D
ERROR v=5
3 atributos:
5
base, valor, posicion b=8 N D
OK v=8
Acc. sem.: comprobar
D 8
Sentencia: 285o
v=2
Resultado: error digito 2 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 no-
hoja un operador
Ejemplos
rbol ASA S:=A+B*C IF A<B THEN X:=B A[I]:=B
E + := IF :=
E T A B S + < :=
+ [] B
T F A * A B X B A I
F B B C

A 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 apn

E apn + T
apn

E apn - T id
apn
puntero
T num (implementacin)
apn
id dependencia entre
atributos apn
+

- id c

id a num 4

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 grafo acclico
+ +

* -
*

a - b c a -

b c b 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

Potrebbero piacerti anche