Professional Documents
Culture Documents
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
Extensin del anlisis sintctico para la
comprensin del programa
Anlisis Semntico
Comprobaciones adicionales (estticas)
Comprobacin de tipos
compatibles
Comprobaciones de unicidad
variables en funciones,
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
Reglas semnticas
Generacin de cdigo
Valores de atributos:
Gramticas de Atributos
Unin de gramtica con atributos y reglas semnticas
A2
Notaciones
A3
B1
B2
error
B3
C1
C2
traductor
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
Ejemplo 1. DDS
Ejemplo (calculadora):
produccin
Acciones semnticas
E::= E+T
E::= T
E.val =T.val
T::= T*F
T::= F
T.val =F.val
F::= num
F.val =num.val
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=
cod=
10
Ejemplo 2. DDS
Ejemplo (traductor C->Pascal):
produccin
Acciones semnticas
S::= T id L ;
L::= , id L
L::=
L.cod =
T::= float
T.cod = real
T::= int
F.cod = int
Ejemplo 3
E
v=141
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
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
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
S
S.s
Sintetizados
El valor a asignar a un nodo depende
A
A.x
B
B.x
C
C.x
Heredados
S
S.x
A
A.x
B
B.h
C
C.x
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
Mtodos Estticos
Orden de evaluacin se decide en tiempo de construccin del
compilador
16
Grafos de Dependencias
Los atributos no pueden evaluarse en
cualquier orden
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
Grafos de Dependencias
traductor decl Pascal->C:
produccin
cs
Var L : T
Acciones semnticas
th cs
cs
th L cs
S.cs=L.cs
L::= L, id
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
19
int a; int b;
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
10
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
11
+ E
E
E
num
if
then
else
num
num
if-then-else
num
num
num
23
E
T
F
A
rbol
ASA
T
F
B
S:=A+B*C
:=
B
A[I]:=B
:=
IF
+
<
*
:=
B
[]
B
B
I
C
24
12
26
13
L-atribuda
S-atribuda
27
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
E
v=141
N
v=2
D
v=1
D
v=2
2
1
28
14
Analizadores descendentes:
Las LL(1) pueden evaluarse con analizadores LL(1) y
descenso recursivo
Si tienen recursividad a izquierda, puede extenderse la
Analizadores ascendentes
Las LL(1) y las LR(1) pueden evaluarse con analizadores
29
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
15
X::=ab {accion();} b
31
32
16
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
Ejemplo ETDS
Ejemplo
Reglas semnticas
{L.her := T.tipo}
Lid
{T.tipo := integer}
{T.tipo := real}
{L1.her := L0.her}
{aadetipo (id.lex, L.her)}
34
17
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
devolver T.s=f(Cj.h,Cj.s)
36
18
Evaluacin Descendente
Eliminar recursin por la izquierda en ETDS
{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
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
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
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
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
Produccin
Fragmento de Cdigo
SE n
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
43
E::=T E
E::= + T M E
E::= - T N E
E::=
T::= num {escribe num.lex}
M::= {escribe +}
N::= {escribe - }
44
22
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]
46
23
Reglas semnticas
{}
{tipo_act=T.tipo} OJO: no cumple DDS
{T.tipo := integer}
{T.tipo := real}
{aadetipo (id.lex, L0.her)}
Lid
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
SA
SB
Bab{accion1}cd
Aab{accion2}cde
No LR(1)
LALR(1)
49
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:
25
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
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:
52
26
N
OK
b=8
b=8
3 atributos:
N
ERROR
base
o
D
v=5
5
b=8 N
OK
D
v=8
8
D
v=2
2
Sentencia: 285o
Resultado: error digito 2
53
E
T
F
A
rbol
ASA
T
F
B
S:=A+B*C
:=
B
A[I]:=B
:=
IF
+
<
*
:=
B
[]
B
B
I
C
54
27
Funciones auxiliares
55
Utiliza
REGLAS SEMNTICAS
E E1 + T
E E1 - T
ET
E.apn := T.apn
T(E)
T.apn := E.apn
T id
T num
56
28
apn
apn
apn
apn
id
apn
puntero
(implementacin)
num
apn
dependencia entre
atributos apn
id
+
id c
num
id a
57
Ej.: a * (b c) + (b c)
rbol sintctico
+
-
*
a
grafo acclico
+
b
c
*
c
58
29
59
30