Está en la página 1de 18

1

1
Anlisis Semntico
2
Anlisis Semntico
n Comprobacin esttica
n Comprobacin de tipos
n La aplicacin de los operadores y operandos deben ser compatibles
n Comprobaciones del flujo del control
n Las proposiciones que hacen que se abandone el flujo del control de
una construccin debe tranferirse a otro punto. (break, exit)
n Comprobaciones de unicidad
n 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,..
n Comprobaciones relacionadas con nombre
n El mismo nombre debe aparecer dos o ms veces. En Ada el nombre
que aparece en un bloque puede aparecer al principio y final, el
compilador debe comprobar que se utiliza el mismo el ambos sitios
2
3
Anlisis Semntico
n Adems de comprobar que un programa cumple con las reglas de
la gramtica, hay que comprobar que lo que se quiere hacer tiene
sentido
n Esta fase tambenmodifica la tabla de smbolos y suele estar
mezclada con la generacin de cdigo intermedio
n Las gramticas independientes del contexto (G2) no son
suficientes para realizar el anlisis semntico
n Por ejemplo, no hay forma de comprobar si una variable ha sido
definida ya, o si existe una determinada etiqueta
n Es necesario definir un tipo de gramtica ms rica como las
gramticas de atributo
n Definicin
n Las gramticas de atributo son gramticas G2 a las que se
aaden atributos y reglas de evaluacin de atributos
(funciones/reglas semnticas)
4
El Analizador Semntico
n Traduccin dirigida por sintaxis
Autmata a pila
(Gramtica independiente
del contexto)
Acciones Semnticas
+
Traductor
Dirigido por
Sintaxis
Cadena
De entrada
rbol de Anlisis
Sintctico
Grafo de
Dependencias
Orden de Evaluacin
de las reglas Semnticas
3
5
Traduccin dirigida por sintaxis
n Notaciones
n Definicin dirigida por la sintaxis (DDS)
n Esquema de Traduccin (EDT)
n Evaluacin de una accin
n Generacin de cdigo
n Guardar/Consultar informacin de la Tabla de Smbolos
n Notificacin de mensajes de error
6
Traduccin dirigida por sintaxis
n Definicin dirigida por la sintaxis
n Cada smbolo tiene un conjunto de atributos asociados
n Atributo: una cadena, nmero, tipo, posicin de memoria, etc
n NombredeSmbolo.NombredeAtributo
n Cada produccin A= tiene asocida un conjunto de acciones
semnticas que se representan como una funcin:
n X.atr=f (Y
1
.atr, ..., Y
n
.atr)
n Dos tipos de atributos
n Sintetizados (locales)
n El valor a asignar a un nodo depende del valor de los nodos hijos
n Heredados
n Se pasan a niveles inferiores del rbol. Su valor depende del valor de
los hermanos y del padre.
4
7
Traduccin dirigida por sintaxis
n Ejemplo
n Sintetizados, CALCULADORA, Anlisis Ascendente
Produccin Reglas Semnticas
LE n print (E.val)
EE
1
+ T E.val :=E
1
.val +T.val
ET E.val :=T.val
TT
1
* F T.val :=T
1
.val * F.val
TF T.val :=F.val
F( E ) F.val :=E.val
Fdgito F.val :=dgito.valex
8
Traduccin dirigida por sintaxis
n Ejemplo
n Heredados, INFORMACIN DE TIPOS
Produccin Reglas Semnticas
DT L L.her :=T.tipo
Tint T.tipo :=integer
Treal T.tipo :=real
LL
1
, id L
1
.her :=L.her
aadetipo (id.entrada, L.her)
Lid aadetipo (id.entrada, L.her)
5
9
Grafos de Dependencias
n Si un atributo b en un nodo depende de un atributo c,
entonces se debe evaluar la regla semntica para b
despus de la regla semntica que define a c
n Las interdependencias entre atributos heredados y
sintetizados de un rbol de anlisis sintctico se pueden
representar mediante un grafo dirigido llamado Grafo de
Dependencias
10
val
val val
Grafo de Dependencias
n Algoritmo de Construccin
Para cada nodo n en el rbol de anlisis sintctico hacer
Para cada atributo a del smbolo gramatical en el nodo n hacer
Construir un nodo en el grafo de dependencias para a;
Para cada nodo n en el rbol de anlisis sintctico hacer
Para cada regla semntica b:=f(c
1
, c
2
, ..., c
k
) asociada con la
produccin utilizada en n hacer
Para cada i:=1 hasta k hacer
Construir una arista desde el nodo c
i
hasta el nodo para b;
Produccin Regla Semntica
EE
1
+E
2
E.val:=E
1
.val+E
2
.val
E
E
1
+ E
2
6
11
Grafo de Dependencias
n Ejemplo:
n real id
1
, id
2
, id
3
D
T.tipo=real
real
L.her=real
L.her=real
,
id
3
L.her=real ,
id
2
id
1
4
5
7
9
6
8
3
2
1
10
entrada
entrada
entrada
her
her
her
tipo
12
Grafo de dependencias
n Evaluacin de las reglas semnticas
n Mtodos con rbol de anlisis sintctico
n Se realiza en el momento de compilacin
n El orden se obtiene de un ordenamiento topolgico del grado de
dependencias construido segn el rbol de anlisis sintctico para
cada entrada
n Si hay ciclos no funciona
n Mtodos basados en reglas
n Se realiza en el momento de construccin del compilador
n Las reglas semnticas asociadas con las producciones se analizan a
mano
n No necesita construir un grafo de dependencias de forma explcita
n Mtodos sin recuerdo
n Para realizar el orden de evaluacin no tiene en cuenta las reglas
semnticas. Por ejemplo en el momento de anlisis sintctico
n No necesita construir un grafo de dependencias de forma explcita
7
13
Evaluacin Ascendente de Definiciones con
Atributos Sintetizados (I)
n Los atributos sintetizados se pueden evaluar con un
analizador sintctico ascendente conforme la entrada es
analizada
n El analizador sintctico conserva en su pila los valores de
los atributos sintetizados asociados a los smbolos
gramaticales
n Cuando se hace una reduccin se calculan los valores de
los nuevos atributos sintetizados a partir de los atributos
de la pila para los smbolos gramaticales del lado derecho
de la produccin
Y.y Y
X.x X
... ...
Val Estado
Tope
14
Evaluacin Ascendente de Definiciones con
Atributos Sintetizados (II)
n Ejemplo:
n Produccin Fragmento de Cdigo
LE n print (val [tope])
EE
1
+ T val [ntope] :=val [tope-2] + val [tope]
ET
TT
1
* F val [ntope] :=val [tope-2] val [tope]
TF
F( E ) val [ntope] :=val [tope-1]
Fdgito F.val :=dgito.valex
8
15
Definiciones con Atributos por la
Izquierda
n Si la traduccin ocurre durante el anlisis sintctico, el ordende
evaluacin de los atributos se corresponde con el orden en el que se
crean los nodos de un rbol de anlisis sintctico
n Un orden natural para los mtodos de traduccin descendente y
ascendente es el orden de evaluacin en profundidad
procedimiento visitaprof (n:nodo)
empezar
para cada hijo mde n, de izquierda a derecha
hacer empezar
evaluar los atributos heredados de m;
visitarprof (m)
fin;
evaluar los atributos sintetizados de n
fin
16
Esquema de Traduccin
n Cada smbolo tiene un conjunto de atributos asociados
n Nombre_de_Smbolo.Nombre_de_Atributo
n Las acciones semnticas se intercalan con los smbolos
del consecuente
n X::=ab {accion();} b
n Orden de evaluacin fijo
n Dos tipos
n EDT slo con atributos sintetizados
n Acciones al final de la produccin
n EDT con atributos sintetizados y heredados
n Atributos heredados de un smbolo del consecuente
n Atributos sintetizados utilizados en acciones
n Atributos sintetizados del antecedente
9
17
Esquema de Traduccin
n Slo con atributos sintetizados
n Una accin para cada regla semntica
n Se coloca al final del lado derecho de la produccin
Produccin Regla Semntica
TT
1
*F T.val:=T
1
.val x F.val
TT
1
*F {T.val:=T
1
.val x F.val}
n Con atributos heredados y sintetizados
n Un atributo heredado para un smbolo en el lado derecho de una
produccin debe calcularse en una accin antes que dicho smbolo
n Una accin no debe referirse a un atributo sintetizado de un smbolo que
est a la derecha de la accin
n Un atributo sintetizado para el NO terminal de la izquierda solo puede
calcularse despus de que se hayan calculado todos los atributos a los
que hace referencia. (La accin se sita al final del lado derecho de la
produccin)
18
Generacin de Cdigo Intermedio
n Proceso de Sntesis
n Lenguaje Intermedio
n Generacin de Cdigo
n Ventajas del cdigo intermedio
n Facilitar la fase de optimizacin
n Aumentar la portabilidad del compilador de una mquina a otra
n Se puede utilizar el mismo analizador para diferentes generadores
n Se pueden utilizar optimizadores independientes de la mquina
n Facilitar la divisin en fases del proyecto
Fuente Scanner Parser
Generador
de
Cdigo
TDS
Objeto
LI
10
19
Tipos de representaciones
intermedias
n Notacin Polaca Inversa (RPN)
n Los operadores van despus de los operandos
n S = A + B * C S A B C * + =
n Ventajas
n Facilidad para generar cdigo a partir de ella
n Es la notacin ms sencilla para el lenguaje intermedio
n Inconvenientes
n El cdigo es difcil de entender
n No es til para optimizacin de cdigo
n rboles de Sintaxis Abstracta (rbol Semntico)
n Cdigos de tres direcciones
n Cuartetos
n Tercetos
n Tercetos Indirectos
20
rboles de Sintaxis Abstracta
n Son rboles de derivacin en los que no existe
informacin superflua
n Cada nodo hoja representa un operando y cada no-hoja
un operador
n 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
I F
< :=
A B X B
:=
[ ] B
A I
11
21
Cdigos de Tres Direcciones
n Cada lnea de cdigo tiene un operador y hasta tres
direcciones
n Tipos: Cuartetos, Tercetos, Tercetos Indirectos
n Cuartetos
n Se representan por cuatro valores:
(<OPERADOR>,<Operando
1
>,<Operando
2
>,<Resultado>)
n Ejemplos
Expresin Cuartetos Otra representacin
S:=A+B*C * B C T
1
(*, B, C, T
1
)
+ A T
1
T
2
(+, A, T
1
, T
2
)
:= T
2
S (:=, T
2
, , S)
IF A<B THEN X:=B < A B E
1
(<, A, B, E
1
)
GOTO E
2
(GOTO, , , E
2
)
LABEL E
1
(LABEL, , , E
1
)
:= B X (:=, B, , X)
LABEL E
2
(LABEL, , , E
2
)
22
Tercetos
n Los cuartetos son la herramienta ms general
n Inconvenientes
n Ocupan demasiado espacio
n Requieren muchas variables auxiliares para almacenar los
resultados intermedios
n Los tercetos resuelven este problema suprimiendo el
operando del resultado, queda implcito y asociado a
dicho terceto
(<OPERADOR>, <Operando
1
>, <Operando
2
>)
n Hacen referencia a otro terceto
n Son equivalentes a rboles de Sintaxis Abstracta
12
23
Tercetos y Tercetos Indirectos
n Ejemplos
Expresin Tercetos
S:=A+B*C 1 (*, B, C)
2 (+, A, (1))
3 (:=, (2), S)
IF A<B THEN X:=B 1 (<, A, B)
2 (I FF, , (4))
3 (:=, B, X)
4 (,,)
n Los Tercetos Indirectos son anlogos a los anteriores
pero en lugar de ejecutarse secuencialmente se ejecutan
segn un vector llamado SECUENCIA
n Son ms fciles de optimizar
n Ocupan menos memoria, el mismo terceto aparece una vez
24
Tercetos Indirectos, Ejemplos
Expresin Tercetos
S:=A+B*C 1 (*, B, C)
X:=A+B*C 2 (+, A, (1))
3 (:=, (2), S)
4 (:=, (2), X)
VE=(1, 2, 3, 1, 2, 4)
WHI LE X<B DO X:=X+1 1 (<, X, B)
2 (I FF, , (6))
3 (+, X, 1)
4 (:=, (3), X)
5 (GOTO, , (1))
6 (, , )
VE=(1, 2, (3, 4, 5, 1, 2)*, 6)
13
25
Tercetos Indirectos, Optimizacin
n Cdigo Inicial
Expresin Tercetos Orden de Ejecucin
While X<B do 1 (<, X, B) VE=(1,2,(3,4,5,6,7,1,2)*,8)
A:=X+1; 2 (I FF, , (8))
B:=B-1 3 (+, X, 1)
4 (:=, (3), A)
5 (-, B, 1)
6 (:=, (3), B)
7 (GOTO, , (1))
8 (, , )
n Cdigo Optimizado
If X<B
THEN A:=X+1;
WHILE X<B DO
B:=B-1
VE=(1, 2, 3, 4, (1, 2, 5, 6, 7)*, 8)
26
Comparacin entre
representaciones
n Nivel de Indireccin
n La representacin de tercetos tiene mayor nivel de indireccin
que los cuartetos
n Optimizacin
n Mover cdigo en los tercetos es relativamente ms difcil, aunque
en menor grado para los tercetos indirectos
n Espacio
n Los cuartetos ocupan ms memoria, especialmente si se utilizan
las variables temporales ms de una vez
14
27
Tercetos
n Traduccin dirigida por la sintaxis a cdigo de tres
direcciones
n Se construyen nombres temporales para los nodos interiores del
rbol sintctico
n Se calcula el valor del no terminal E en el lado izquierdo de
EE
1
+E
2
dentro de un nuevo temporal t
n E.lugar, es el nombre que contendr el valor de E
n E.cdigo, es la secuencia de proposiciones de tres direcciones que
evalan E
n La funcin tempnuevo devuelve una secuencia de nombres distintos
t
1
, t
2
,... En sucesivas llamadas
28
Ejemplo TDS a Tercetos
n Producciones Regla Semntica
S id:= E S.cdigo := E.cdigo || gen(id.lugar := E.lugar)
E E
1
+E
2
E.lugar := tempnuevo;
E.cdigo := E
1
.cdigo || E
2
.cdigo ||
gen(E.lugar := E
1
.lugar + E
2
.lugar)
E E
1
*E E.lugar := tempnuevo;
E.cdigo := E
1
.cdigo || E
2
.cdigo ||
gen(E.lugar := E
1
.lugar * E
2
.lugar)
E -E
1
E.lugar := tempnuevo;
E.cdigo := E
1
.cdigo || gen(E.lugar menosu E
1
.lugar)
E (E
1
) E.lugar := E
1
.lugar;
E.cdigo := E
1
.cdigo
E id E.lugar := id.lugar;
E.cdigo :=
15
29
Generacin de Cdigo a partir de
Notacin Polaca
n El cdigo se genera cuando se encuentra el operador
n Ejemplo:
Pila Entrada Cdigo Generado
$ SABC*+:=
$S ABC*+:=
$SA BC*+:=
$SAB C*+:=
$SABC *+:= LOAD C
MUL B
STO T
1
$SAT
1
+:= LOAD T
1
ADD A
STO T
2
$ST
2
:= LOAD T
2
STO S
30
Generacin de Cdigo Intermedio
en el Anlisis Sintctico Recursivo
n Se pueden utilizar las rutinas de rboles de sintaxis abstracta,
incorporndolas al cdigo
n Supongamos que se genera con el anlisis un rbol binario con tres
campos por nodo: info (informacin del nodo); izda (puntero al
subrbol izquierdo; dcha (puntero al subrbol derecho)
n Se pueden definir las funciones
n CreaNodo: crea un nodo del rbol
n CreaHoja: crea un nodo hoja
n Se aade un parmetro a cada procedimiento que contiene el rbol
generado hasta ese momento
n Adems, se pueden formar grafos dirigidos para optimizar las
expresiones aritmticas
16
31
GCI con ASA
Produccin Regla Semntica
E
0
::=E
1
+T E
0
.Nodo:=CreaNodo(+, E
1
.Nodo, T.Nodo)
E
0
::=E
1
*T E
0
.Nodo:=CreaNodo(*, E
1
.Nodo, T.Nodo)
E::=T E
0
.Nodo:=T.Nodo
T::=(E) T.Nodo:=E.Nodo
T::=Id T.Nodo:=CreaHoja(ValorLex(Id), Id.Puntero)
T::=Numero T.Nodo:=CreaHoja(ValorLex(Numero), Numero.Valor)
32
Ejemplo de GCI
Funcion E (VAR Arbol: Arbol)
(* E::= Identificador := E)
c:= GetToken;
I f c=Identificador Then
nodo:= CreaHoja(Identificador, token.puntero(c));
c:=GetToken;
I f c=:= Then
Arbol:= CreaNodo(:=, nodo, NIL);
E(nodo.dcha(Arbol))
else
Fail; error
else
Fail; error
17
33
GCI- Asignaciones con cuartetos
Produccin Regla Semntica
S::=Id:=E S.Cdigo:=E.Cdigo
gen(:=, E.Valor, Id.Valor)
E
0
:=E
1
+E
2
E
0
.Valor:=newtemp;
E
0
.Cdigo:=E
1
.Codigo
E
2
.Codigo
gen(+,E
1
.Valor,E
2
.Valor,E
0
.Valor)
E
0
:=E
1
*E
2
E
0
.Valor:=newtemp;
E
0
.Cdigo:=E
1
.Codigo
E
2
.Codigo
gen(*,E
1
.Valor,E
2
.Valor,E
0
.Valor)
E
0
:=(E
1
) E
0
.Valor:= E
1
.Valor;
E
0
.Cdigo:=E
1
.Codigo
E:=Id E.Valor:= Id.Valor;
E.Cdigo:=
34
GCI- Condiciones Booleanas
Produccin Regla Semntica
E
0
:=E
1
or E
2
E
0
.After := newlabel;
E
0
.False := newlabel;
E
0
.Valor:= newtemp;
E
0
.Codigo:= E
1
.Codigo;
gen(I F=, E
1
.Valor, 0, E
0
.False)
gen(:=, 1, , E
0
.Valor)
gen(GOTO, , , E
0
.After)
gen(LABEL, , , E
0
.False)
E
2
.Codigo
gen(:=, E
2
.Valor, , E
0
.Valor)
gen(LABEL, , , E
0
.After)
18
35
GCI- Condicionales
Produccin Regla Semntica
S
0
:=IF E THEN S
1
ELSE S
2
S
0
.Else:= newlabel;
S
0
.After:= newlabel;
S
0
.Codigo:= E.Codigo
gen(IF=, E.Valor, 0, S
0
.Else)
S
1
.Codigo
gen(GOTO, , , S
0
.After)
gen(LABEL, , , S
0
.Else)
S
2
.Codigo
gen(LABEL, , , S
0
.After)
36
GCI- Bucles
Produccin Regla Semntica
S
0
:=WHILE E DO S
1
S
0
.Begin:= newlabel;
S
0
.After:= newlabel;
S
0
.Codigo:= gen(LABEL, , , S
0
.Begin)
E
0
.Codigo
gen(IF=, E.Valor, 0, S
0
.After)
S
1
.Codigo
gen(GOTO, , , S
0
.Begin)
gen(LABEL, , , S
0
.After)