Está en la página 1de 30

1

1
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
2
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
3
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 ...)
4
Anlisis Semntico. Procesadores de Lenguaje I
El Analizador Semntico
Semntica dirigida por sintaxis
Autmata a pila
(Gramtica independiente
del contexto)
Acciones Semnticas
+
Semntica
Dirigida por
Sintaxis
Cadena
De entrada
rbol de Anlisis
Sintctico
Grafo de
Dependencias
Orden de Evaluacin
de las reglas Semnticas
3
5
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
6
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 (Y
1
.atr, ..., Y
n
.atr)
Tambin se conocen estas acciones como ecuaciones de atributos
4
7
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
Notaciones
Definicin dirigida por la sintaxis (DDS)
Acciones asociadas a cada produccin (sin orden especificado)
Esquema de Traduccin (ETDS)
Acciones intercaladas en cada momento. Notacin para implementar un
traductor
A
2
A
1
A
3
B
2
B
1
B
3
C
2
C
1
S
error
error
8
Anlisis Semntico. Procesadores de Lenguaje I
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
Lxico: num + num * num
Sintctico: E+TE+T*F
Semntico: valor: 31
Ejemplo 1
E
E.val=31
num=3
+
*
E
E.val=7
T
T.val=8
T
T.val=24
F
T.val=8
F
F.val=3
num=8
T
T.val=7
F
F.val=7
num=7
5
9
Anlisis Semntico. Procesadores de Lenguaje I
Ejemplo 1. DDS
Ejemplo (calculadora):
F.val =num.val
F::= num
T.val =F.val
T::= F
T
0
.val =T
1
.val *F.val
T::= T*F
E.val =T.val
E::= T
E
0
.val =E
1
.val +T.val
E::= E+T
Acciones semnticas produccin
10
Anlisis Semntico. Procesadores de Lenguaje I
Traductor C->Pascal
S::=T id L ;
L::= , id L |
T::= float | int
1 atributo: cdigo
Acc. sem.: concatenar
Sentencia: float a,b,c;
Resultado: var a,b,c: real
Ejemplo 2
S
cod=var a,b,c: real
T
cod=: real
,
cod=
L
cod=,b,c
float
cod=float
id
cod=a
id
cod=b
L
cod=,c
id
cod=c
L
cod=
;
cod=
,
cod=

cod=
6
11
Anlisis Semntico. Procesadores de Lenguaje I
Ejemplo 2. DDS
Ejemplo (traductor C->Pascal):
(|| representa concatenar)
F.cod = int
T::= int
T.cod = real
T::= float
L.cod =
L::=
L
0
.cod = , || id.cod || L
1
.cod
L::= , id L
S.cod =var || id.cod || : ||
T.cod
S::= T id L ;
Acciones semnticas produccin
12
Anlisis Semntico. Procesadores de Lenguaje I
Ejemplo 3
Valor numrico decimal/octal
2 atributos:
base, valor
Acc. sem.: aritmtica
Sentencia: 215o
Resultado: 141
E
v=141
E::=N base
N::= N D | D
base::=o |
D::= 0|1||9
5
N
v=17*8+5
D
v=5
base
D
v=2
2
N
v=2*8+1
D
v=1
N
v=2
o
1
b=8
b=8
b=8
7
13
Anlisis Semntico. Procesadores de Lenguaje I
Ejemplo 3. DDS
Ejemplo (nmeros enteros/octales):
E.base=base
E.val=N.val
E::= N base
D.val = 9
D::= 9

D.val = 1
D::= 1
D.val = 0
D::= 0
N.val = D.val
N::= D
N
1
.base=N
0
.base
N
0
.val =
N
1
.val*N
1
.base +D.val
N::= N D
Acciones semnticas produccin
14
Anlisis Semntico. Procesadores de Lenguaje I
Traductor infija->postfija
1 atributo: cdigo
Acc. sem.: concatenar
Sentencia: 9-5+2
Resultado: 9 5 2 +
Ejemplo 4
E
cod=9
operador
E::=T E
E::= op T E
E::=
T::= num
operador

num
num
num
9
5
2
+
-
T
cod=9
E
cod=9 5 -
T
cod=5
E
cod=9 5 2 +
T
cod=2
E
cod=
9 5 2 +
8
15
Anlisis Semntico. Procesadores de Lenguaje I
Gramticas de Atributos. DDS
Dos tipos de atributos
Sintetizados
El valor a asignar a un nodo depende
del valor de los nodos hijos
Heredados
Se pasan a niveles inferiores del rbol.
Su valor depende del valor de los
hermanos y del padre
B
B.x
A
A.x
C
C.x
S
S.s
C
C.x
B
B.h
A
A.x
S
S.x
S.s=f(A.x, B.x, 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
16
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
9
17
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
18
Anlisis Semntico. Procesadores de Lenguaje I
val
val val
Grafos de Dependencias
Creacin: cada produccin A->X
1
...X
n
define una parte del
grafo, se construye a partir de la cadena concreta
1. Se crea un nodo por cada atributo X
i
.a
j
de cada smbolo de la
produccin
Los atributos heredados van a la izquierda y los sintetizados
a la derecha
2. Para cada regla semntica X
i
.a
j
=f(..., X
k
.a
l
,...) se hacen arcos
desde cada nodo X
k
.a
l
hacia el nodo X
i
.a
j
Esto se repite para cada k y l afectados por la regla
Ejemplo:
Produccin Regla Semntica
EE+E E
0
.val:=E
1
.val+E
2
.val
E
E
1
+ E
2
10
19
Anlisis Semntico. Procesadores de Lenguaje I
Grafos de Dependencias
traductor decl Pascal->C:
Atributos:
S: S.cs (cdigo sintetizado)
L: L.th (tipo heredado), L.cs (cdigo sintetizado)
T: T.ts (tipo sintetizado)
T.ts = int
T::= integer
T.ts = float
T::= real
L.cs =L.th||id.valex||;
L::=id
L
0
.cs = L
1
.cs ||L
0
.th||id.valex||;
L
1
.th= L
0
.th
L::= L, id
L.th=T.ts
S.cs=L.cs
S::= var L : T;
Acciones semnticas produccin
cs L
L , id
cs th valex
th
cs
L
id
valex
th
cs
S
Var L : T
cs th cs
20
Anlisis Semntico. Procesadores de Lenguaje I
Ejemplo Grafo de Dependencias
traduccin: var a,b: integer; int a; int b;
(aparecer en atributo S.cs)
L , id
id
cs
S
Var L : T
cs
cs
cs th valex
th
valex 1 a
2 b
integer
3 int
4 int
5 int
6 int a;
7
int a; int b
8
int a; int b
Orden topolgico de
evaluacin
En general puede haber
varios rdenes topolgicos
11
21
Anlisis Semntico. Procesadores de Lenguaje I
Evaluacin
Diseo esttico del orden de recorrido
Atributos heredados
de A
Atributos sintetizados
de A
her. sint.
A
B
her. sint.
C
her. sint.
D
Reglas de
evaluacin de
atributos
22
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
12
23
Anlisis Semntico. Procesadores de Lenguaje I
Creacin del rbol Sintctico
Abstracto (ASA)
rboles sintcticos (parse tree)
rboles de sintaxis abstractos (sintax tree)
E
+ E E
num * E E
num num
S
then
if
B S
else
S
+
* num
num num
if-then-else
B S S
24
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
E
T
F
A
T
F
B
+
+
A B
:=
S +
A *
B C
IF
< :=
A B X B
:=
[ ] B
A I
13
25
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
26
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->X
1
X
2
...X
n
:
A.s=f(X
1
.s, X
2
.s, , X
n
.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:
X
i
.h, en 1i=n en p:A->X
1
X
2
...X
n
depende slo de:
1. Atributos de smbolos por la izquierda: X
j
, 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
14
27
Anlisis Semntico. Procesadores de Lenguaje I
Gramticas L-atribudas, S-atribudas
L-atribuda S-atribuda
Evaluacin durante el Anlisis Sintctico
No se precisa un rbol explcito (toda la informacin
necesaria en el nodo recorrido)
28
Anlisis Semntico. Procesadores de Lenguaje I
Valor nmerico decimal/octal
Sentencia: 215o; Resultado: 141
Ejemplo gramtica No L-Atribuda
E
v=141
5
N
v=17*8+5
D
v=5
base
D
v=2
2
N
v=2*8+1
D
v=1
N
v=2
o
1
b=8
b=8
b=8
Produccin Acciones semnticas
E N base {N.base=base.b
E.val=N.val}
N N D {N
1
.base=N
0
.base
N
0
.val =
N
1
.val*N
1
.base +D.val}
N D {N.val = D.val}
D0 {D.val = 0}
D1 {D.val = 1}

D 9 {D.val = 9}
15
29
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
30
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
16
31
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
32
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->
1

2
{
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->
1

2
{A.s= f(
1
.s,
2
.s,
3
.s)}
3
17
33
Anlisis Semntico. Procesadores de Lenguaje I
Ejemplo ETDS
El siguiente ETDS no cumple los criterios:
S::= AA {A
1
.her=1; A
2
.her=2}
A::= a {imprimir(A.her)}
Modificacin:
S::= {A
1
.her=1;}
A {A
2
.her=1;}
A
A::= a {imprimir(A.her)}
34
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 {L
1
.her := L
0
.her}
L, id {aadetipo (id.lex, L.her)}
Lid {aadetipo (id.lex, L.her)}
18
35
Anlisis Semntico. Procesadores de Lenguaje I
Ejemplo ETDS
Ejemplo con
atributos
heredados:
flujo horizontal
y descendente
D
,
T
T.tipo=r
;
L
L.her=r
float
L
L.her=r
id
aadeTipo(c,real)
,
L
F.val=3
id
aadeTipo(c,real)
id
aadeTipo(c,real)
float a,b,c;
36
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: C
i
calcula atributos heredados C
i
.h=g(C
j
.h,C
j
.s,T.h)
C
i
.s=evaluar(C
i,
C
i
.h)
devolver T.s=f(C
j
.h,C
j
.s)
19
37
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 {A
0
.a=g(A
1
.a, Y.y)}
A->X {A.a=f(X.x)}
A->X {A.h=f(X.x)}
A {A.a=A.s}
A->Y {A
1
.h=g(A
0
.h,Y.y)}
A {A
0
.s=A
1
.s}
A-> {A.s=A.h}
A tendr un par de atributos (s,h) por cada sintetizado a original A.a
38
Anlisis Semntico. Procesadores de Lenguaje I
Evaluacin Descendente
Ejemplo
E::= E + T {E
0
.val =E
1
.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 {E
1
.h =T.val+ E
0
.h}
E {E
0
.s = E
1
.h}
E::= {E.s =E.h}
T::= num {T.val =num.val}
20
39
Anlisis Semntico. Procesadores de Lenguaje I
Gramtica Original
9+5+2
E
val
+ E
val
T
val
num
2 14
16
+ E
val
T
val
5 9
T
val
9
9
num
5
num
2
40
Anlisis Semntico. Procesadores de Lenguaje I
Con Evaluacin Descendente
9+5+2
E
s
+
E
h s
T
val
+

num
num
num
9
5
2
E
h s
E
h s
T
val
T
val
9
14
16 16 2
16
16
5
9
16
21
41
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
X.x X
Y.y Y
Z.z Z
... ...
val Pila LR
cima-1
cima-2
val [cima] cima
val [cima 1]
val [cima-2]
A.s=f(X.x,Y.y,Z.z)
A::= XYZ
Acciones
semnticas
Produccin
42
Anlisis Semntico. Procesadores de Lenguaje I
Evaluacin Ascendente de Definiciones
con Atributos Sintetizados
Ejemplo:
Fragmento de Cdigo Produccin
Fdgito
ncima=cima-2
val [ncima] := val [cima-1]
cima=ncima
F( E )
TF
ncima=cima-2
val [ncima] := val [cima-2] val [cima]
ncima=cima
TT
1
* F
ET
ncima=cima-2
val [ncima] := val [cima-2] + val [cima]
cima=ncima
EE
1
+ T
print (val [cima])
SE n
Acciones
ejecutadas tras
cada reduccin
22
43
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)
44
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->X
1
X
j-1
{accion} X
j
A->X
1
X
j-1
MX
j
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 - }
23
45
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->X
1
X
n
A->M
1
X
1
M
n
X
n
(si todo X
i
tiene atrib heredado)
Todo atributo heredado est en el sintetizado del marcador
A->X
1
X
j-1
{ X
j
.h=f(A.x,X
1
.x,,X
j-1
.x) }
X
j
pasa a:
A->X
1
X
j-1
M
j
X
j
M
j
-> { M
j
.s=f(A.x,X
1
.x,,X
j-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)
46
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)
A->M
1
X
1
M
n
X
n
?? ??
M
1
.s M
1
X
1
.s X
1

M
n
.s M
n
X
n
.s X
n
... ...
Val Estado
cima -1

val [cima]
cima
val [cima1]

Aqu aparece A.h (se


demuestra por induccin)
24
47
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, L
0
.her)}
Lid {aadetipo (id.lex, L.her)}
48
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;}
25
49
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{accion1}cd
Aab{accion2}cde
SA
SB
Bab M cd
Aab N cde
M {accion1}
N {accion2}
LALR(1) No LR(1)
50
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)
Atributos:
L: L.th (tipo heredado), T: T.ts (tipo sintetizado)
T.ts = int
T::= integer
T.ts = float
T::= real
aadirTipo(id.valex, L.th)
L::=id
L
1
.th= L
0
.th
aadirTipo(id.valex, L
0
.th)
L::= L, id
L.th=T.ts
S::= var L : T;
Acciones semnticas produccin
26
51
Anlisis Semntico. Procesadores de Lenguaje I
Ejemplo modificacin gramtica
gramtica SA para hacer lo mismo (Pascal):
Atributos:
L: L.ts (tipo sintetizado), T: T.ts (tipo sintetizado)
T.ts = int
T::= integer
T.ts = float
T::= real
aadirTipo(id.lex, T.ts)
L.ts=T.ts
L::= id : T
aadirTipo(id.lex, L
1
.ts)
L
0
.ts=L
1
.ts
L::= id , L
S::= var L ;
Acciones semnticas Produccin
52
Anlisis Semntico. Procesadores de Lenguaje I
Eliminacin de atributos heredados
con modificacin de gramtica
Ej.: Gramtica L-atribuida (C)
Atributos:
L: L.th (tipo heredado), T: T.ts (tipo sintetizado)
T.ts = int
T::= int
T.ts = real
T::= float
aadirTipo(id.valex, L.th)
L::=id
L
1
.th= L
0
.th
aadirTipo(id.valex, L
0
.th)
L::= L, id
L.th=T.ts
S::= T L;
Acciones semnticas produccin
Versin gramtica SA?
27
53
Anlisis Semntico. Procesadores de Lenguaje I
Ejemplo Anlisis Semntico
Valor nmerico decimal/octal
Gramtica NO L-A
3 atributos:
base, valor, posicion
Acc. sem.: comprobar
Sentencia: 285o
Resultado: error digito 2
E
v=141
E::=N base
N::= N D | D
base::=o |
5
N
OK
D
v=5
base
D
v=2
2
N
ERROR
D
v=8
N
OK
o
8
b=8
b=8
b=8
Versin gramtica SA?
54
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
E
T
F
A
T
F
B
+
+
A B
:=
S +
A *
B C
IF
< :=
A B X B
:=
[ ] B
A I
28
55
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)
56
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
T.apn := hazHoja (num, num.val) T num
T.apn := hazHoja (id, id.entrada) T id
T.apn := E.apn T ( E )
E.apn := T.apn E T
E.apn := hazNodo (-, E
1
.apn, T.apn) E E
1
- T
E.apn := hazNodo (+, E
1
.apn, T.apn) E E
1
+ T
REGLAS SEMNTICAS PRODUCCIN
29
57
Anlisis Semntico. Procesadores de Lenguaje I
Creacin del rbol Sintctico
Abstracto (ASA)
Ej. (construccin ascendente): a 4 + c
E
+ T
id
E
- T
num
E
T
id
+
- id c
num 4
id a
apn
apn
apn
apn
apn
apn
puntero
(implementacin)
dependencia entre
atributos apn
58
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)
+
*
-
-
a
b
c
b
c
rbol sintctico grafo acclico
+
*
-
a
b
c
30
59
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

También podría gustarte