Академический Документы
Профессиональный Документы
Культура Документы
SISTEMAS
ANLISIS SEMNTICO Y
TRADUCCIN
Anlisis Semntico
Comprobacin esttica
Comprobacin de tipos
La aplicacin de los operadores y operandos deben ser
compatibles
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)
Comprobaciones de unicidad
Anlisis Semntico
Adems de comprobar que un programa
cumple con las reglas de la gramtica, hay que
comprobar que lo que se quiere hacer tiene
sentido.
Esta fase tambin modifica la tabla de smbolos
y suele estar mezclada con la generacin de
cdigo intermedio.
Las gramticas independientes del contexto
(G2) no son suficientes para realizar el anlisis
semntico.
Por ejemplo, no hay forma de comprobar si una
variable ha sido definida ya, o si existe una
determinada etiqueta.
Es necesario definir un tipo de gramtica ms
rica como las gramticas de atributo.
Definicin
Definicin
Las gramticas de atributo son
gramticas G2 a las que se aaden
atributos y reglas de evaluacin de
atributos (funciones/reglas
semnticas)
Generacin de cdigo
Guardar/Consultar informacin de la
Tabla de Smbolos
Notificacin de mensajes de error.
Heredados
Ejemplo
Ejemplo
Sintetizados, CALCULADORA, Anlisis
Ascendente
Produccin
L->E n
print
E->E1 + T
E->T
E.val
T->T1 * F
T->F
T.val
F-> ( E )
F->dgito
Reglas Semnticas
(E.val)
E.val := E1.val + T.val
:= T.val
T.val := T1.val * F.val
:= F.val
F.val := E.val
F.val := dgito.valex
Ejemplo
Heredados, INFORMACIN DE
TIPOS
Produccin
Reglas Semnticas
D->T L
L.her := T.tipo
T->int
T.tipo := integer
T->real T.tipo := real
L->L1,id
L1.her := L.her
aadetipo (id.entrada, L.her)
L->id
aadetipo (id.entrada, L.her)
Grafos de dependencias
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
Las interdependencias entre atributos
heredados y sintetizados de un rbol
de anlisis sintctico se pueden
representar mediante un grafo dirigido
llamado Grafo de Dependencias
Grafos de dependencias
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(c1, c2, ..., ck) asociada con
la
produccin utilizada en n hacer
Para cada i:=1 hasta k hacer
Construir una arista desde el nodo ci hasta el nodo
para b;
Produccin
Regla Semntica
E->E1+E2
E.val:=E1.val+E2.val
Grafo de dependencias
Ejemplo: real id1, id2, id3
Grafo de dependencias
Evaluacin de las reglas semnticas
Fragmento de Cdigo
print (val [tope])
val [ntope] := val [tope-2] + val
Esquema de traduccin
Cada smbolo tiene un conjunto de atributos
asociados
Nombre_de_Smbolo.Nombre_de_Atributo
Esquemas de traduccin
Slo con atributos sintetizados
Generacin de cdigo
intermedio
Proceso de Sntesis
Lenguaje Intermedio
Generacin de Cdigo
Tipos de representaciones
intermedias
Notacin Polaca Inversa (RPN)
Ventajas
Inconvenientes
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
Cdigos de tres
direcciones
Cada lnea de cdigo tiene un operador y
hasta tres direcciones
Tipos: Cuartetos, Tercetos, Tercetos Indirectos
Cuartetos. Se representan por cuatro valores:
(<OPERADOR>,<Operando1>,<Operando2>,<Resulta
do>)
Tercetos
Los cuartetos son la herramienta ms
general
Inconvenientes
Ocupan demasiado espacio
Requieren muchas variables auxiliares para
almacenar los resultados intermedios
Tercetos y tercetos
indirectos
Tercetos indirectos,
ejemplos
Tercetos indirectos,
optimizacin
Comparacin entre
representaciones
Nivel de Indireccin
La representacin de tercetos tiene
mayor nivel de indireccin que los
cuartetos
Optimizacin
Mover cdigo en los tercetos es
relativamente ms difcil, aunque en menor
grado para los tercetos indirectos
Espacio
Los cuartetos ocupan ms memoria,
especialmente si se utilizan las variables
temporales ms de una vez
Tercetos
Traduccin dirigida por la sintaxis a
cdigo de tres direcciones
Generacin de cdigo a
partir
Notacin Polaca
El cdigode
se genera cuando se encuentra el operador.
Generacin de Cdigo
Intermedio
Se pueden utilizar las rutinas de rboles de
ensintaxis
el Anlisis
abstracta, Sintctico
incorporndolas al cdigo
Supongamos que se genera con el anlisis un rbol
Recursivo
binario con tres campos por nodo: info (informacin
del nodo); izda (puntero al subrbol izquierdo; dcha
(puntero al subrbol derecho)
Ejemplo GCI
GCI - Condicionales
GCI - Ciclos
Generacin de cdigo
final
Traduccin de la representacin intermedia a cdigo
objeto.
Hay que tener en cuenta la arquitectura de la
mquina para realizar una gestin eficiente de la
memoria y de los registros.
Primero se generan las directivas para reservar
memoria para las variables y datos.
Luego se genera el resto del cdigo. Por ejemplo, los
rboles de sintaxis abstracta se recorren para generar
el cdigo directamente.
Hay que tener en cuenta :
Generacin de cdigo
Estrategias