Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Compilador
Software de Sistemas
Mnica Pinto Alarcn
Curso 2005/2006
Fase de Anlisis
Anlisis lxico
Anlisis sintctico
Anlisis semntico
Fase de Sntesis
Anlisis Semntico
Semntica
Anlisis Semntico
Ejemplo1:
Ejemplo2:
4/38
Anlisis Semntico
5/38
Anlisis Semntico
Anlisis Semntico
G = (N,T,S,P)
Gramtica tipo 2 o de contexto libre:
N: S, A, B
T: a, b
P : SaB | bA
A a | aS | bAA
B b | bS | aBB
7/38
Reglas Semnticas:
Anlisis Semntico
Traduccin
8/38
L:: , id L1
L.Trad :: , || id.lexema || L1.Trad
Desde el punto de vista exclusivamente gramatical sera L::,id L
A a1 a2 a3 ..... an
Reglas Semnticas
a1
(a1.s)
an
(an.s)
a1 ak
(ak.h=f(a1.s, A.s,an.s)
(a1.s)
an
(an.s)
Tipos de Traducciones
Dos Notaciones:
11/38
DDS
Escritura de valores
Condicionales
Modificacin de Variables Globales
Ejemplo 1
Ejemplo de DDS
Se asume lo siguiente:
Ejemplo: Calculadora
L E \n
EE+T
EE-T
ET
T T*F
TT/F
TF
F(E)
Fd
El
ANALEX
entrega
los tokens:
d
opsr
opmd
pa ,pc
fin
L E fin
E E opsr T
L.v= imprime(E.v)
E.v=operacin(E.v,T.v,opsr.o)
ET
T T opmd F
E.v= T.v
T.v=operacin(T.v,F.v,opmd.o)
TF
F pa E pc
Fd
T.v= F.v
F.v= E.v
F.v= d.v
14/38
Ejemplo 2
Cadena de entrada:
4 + 5 * 6 + 3 \n
d opsr d opmd d opsr d fin
Secuencia de pasos:
dFTE
El atributo no se puede perder, as pues se va trasladando su
valor mientras se va reduciendo: F.v = d.v // T.v = F.v // E.v
= T.v
El proceso sigue hasta que en la pila est E opsr T que se
reducir por E
15/38
Ejemplo 2
L.v = imprime(37)
E.v = 37
E.v = 34
T.v = 30
E.v = 4
T.v = 4
T.v = 5
F.v = 4
F.v = 5
T.v = 3
F.v = 6
d.v = 4
opsr.o = mas
d.v = 5
opmd.o = por
d.v = 6
opsr
opmd
F.v = 3
opsr.o=mas
opsr
d.v = 3
fin
fin
16/38
Ejemplo 3
Ejemplo DDS
h heredado, s sintetizado
t tipo, c representacin
L:: L1,id
L:: id
T:: real
T:: integer
Notacin ETDS
Ejemplo:
Notacin DDS:
Notacin EDT:
TT*F
TT*F
18/38
19/38
Ejemplo 4
1
10,2
9,4
1,6
4,3
3,6
8,4
6,3
5,6
7,5
20/38
10
Restricciones de Diseo
A:: B C {D.h:=f(B.a,C.a)} D
21/38
Ejemplo 5
22/38
11
Ejemplo 5
if (buscatipo(id.e) == 0)
else tratamientoerror();
aadetipo(id.e,id.tipo);
/* ya declarada */
if (buscatipo(id.e) == 0)
Ejemplo 5 (Continuacin)
PD;E
DD;D
D id : T
{ if (buscatipo(id.e)==0)
aadetipo(id.e,T.t);
else tratamientoerror();
}
T char
{T.t =CHAR;}
T integer
{T.t = INTEGER;}
T ^ T1
{T.t = pointer(T1.t);}
T array[num] of T1 { T.t = array(1..num.v,T1.t);}
24/38
12
Ejemplo 5 (Continuacin)
E literal
E num
E id
E E1 mod E2
E E1[E2]
E E1 ^
{ E.t= CHAR;}
{ E.t= INTEGER;}
{ if(buscatipo(id.e) !=0)
E.t=buscatipo(id.e);
else tratamientoerror();}
{ if (E1.t==INTEGER && E2.t==INTEGER)
E.t=INTEGER;
else E.t=tipo_error;}
{ if(E2.t==INTEGER && E1.t==array(x,y))
E.t=y;
else E.t=tipo_error;}
{ if(E1.t==pointer(y)) E.t=y;
else E.t=tipo_error;}
25/38
Ejemplo 5 (Continuacin)
S id := E
{ if(buscatipo(id.e)!=0) id.t=buscatipo(id.e);
else if (id.t==E.t) S.t=void;
else S.t=tipo_error;}
S if E then S1
{ if(E.t==BOOLEAN) S.t = S1.t;
else S.t = tipo_error;}
S while E do S1 { if(E.t==BOOLEAN) S.t = S1.t;
else S.t = tipo_error;}
S S1 ; S2
{ if (S1.t ==void &&S2.t==void) S.t=void;
else S.t = tipo_error;}
26/38
13
27/38
Cuartetos
Tercetos
Tercetos indirectos
28/38
14
Operacin
Argumento1
Argumento2
Resultado
Operador
-unario
*
-unario
*
+
:=
Ejemplo 6
(+, a, b, t1)
(+, c, d, t2)
(*,t1, t2, t3)
15
Cdigo en 3 dir
t1 := -c
t2 :=b*t1
t3 :=-c
t4 :=b*t3
t5 :=t2+t4
a:=t5
Posicin
(0)
(1)
(2)
(3)
(4)
(5)
Operador
-unario
*
-unario
*
+
:=
Argumento1 Argumento2
c
b
(0)
c
b
(2)
(1)
(3)
a
(4)
31/38
Tercetos
Tercetos
Indirectos
Proposicin
(0)
(1)
(2)
(3)
(4)
(5)
Proposicin
(0)
(1)
(0)
(1)
(4)
(5)
Posicin
(0)
(1)
(2)
(3)
(4)
(5)
Posicin
(0)
(1)
(4)
(5)
Operador
-unario
*
-unario
*
+
:=
Argumento1 Argumento2
c
b
(0)
c
b
(2)
(1)
(3)
a
(4)
Operador
-unario
*
+
:=
Argumento1 Argumento2
c
b
(0)
(1)
(3)
a
(4)
32/38
16
ab+cd+*
// Notacin post-fija
PUSH a
(Almacena a en la pila)
PUSH b
(Almacena b en la pila)
ADD
(Extrae dos valores de la pila, los suma y guarda el
resultado en la pila)
PUSH c
(Almacena c en la pila)
PUSH d
(Almacena d en la pila)
ADD
(Extrae dos valores de la pila, los suma y guarda el
resultado en la pila)
MUL
(Extrae dos valores de la pila, los multiplica y guarda el
resultado en la pila)
33/38
17
Ejemplo 7
temp1 := inttoreal(2)
temp2 := IDENT3 * temp1
temp3 := IDENT2 + temp2
IDENT1 := temp3
Cdigo optimizado
36/38
18
Ejemplo 8
38/38
19