Sei sulla pagina 1di 44

SEMANTICA FORMAL DE

LENGUAJES DE
ANLISIS SEMNTICO Y TRADUCCIN
PROGRAMACION

Fase de anlisis
semntico

Esta fase revisa el rbol sintctico


junto con los atributos y la tabla de
smbolos para tratar de encontrar
errores semnticos.
El componente ms importante del
anlisis semntico es la verificacin
de tipos. Aqu, el compilador verifica
si los operandos de cada operador
son
compatibles
segn
la
especificacin del lenguaje fuente.

Fase de anlisis
semntico
Sea el siguiente rbol sintctico para
la expresin: comision=fijo+valor*8

Fase de anlisis
semntico
Ejemplo:
Si suponemos que nuestro lenguaje solo
trabaja con nmeros reales, la salida
sera su mismo rbol, excepto porque el
atributo de <NUM>, que era el entero 8 a
la entrada, ahora pasara a ser el real 8,0.
Adems se ha debido controlar que las
variables implicadas en la sentencia, a
saber, comisin, fijo y valor son
compatibles con el tipo numrico de la
constante 8,0.

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

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 nombre

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 en ambos sitios

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)

Traduccin dirigida por


sintaxis

Traduccin dirigida por


sintxis
Notaciones

Definicin dirigida por la sintaxis


(DDS)
Esquema de Traduccin (EDT)
Evaluacin de una accin

Generacin de cdigo
Guardar/Consultar informacin de la
Tabla de Smbolos
Notificacin de mensajes de error.

Traduccin dirigida por


sintxis
Definicin dirigida por la sintaxis

Cada smbolo tiene un conjunto de atributos asociados

Atributo: una cadena, nmero, tipo, posicin de memoria,


etc
NombredeSmbolo.NombredeAtributo

Cada produccin A=a tiene asociada un conjunto de


acciones semnticas que se representan como una
funcin:
X.atr=f (Y1.atr, ..., Yn.atr)

Dos tipos de atributos


Sintetizados (locales)

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.

Ejemplo
Ejemplo
Sintetizados,
Ascendente
Produccin
L->E n
print
E->E1 + T
E->T
E.val
T->T1 * F
T->F
T.val
F-> ( E )
F->dgito

CALCULADORA,

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

Anlisis

Traduccin dirigida por


sintxis
Ejemplo
Heredados,
TIPOS

INFORMACIN

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)

DE

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

Mtodos con rbol de anlisis sintctico


Se realiza en el momento de compilacin
El orden se obtiene de un ordenamiento topolgico del grado
de dependencias construido segn el rbol de anlisis
sintctico para cada entrada
Si hay ciclos no funciona

Mtodos basados en reglas

Se realiza en el momento de construccin del compilador


Las reglas semnticas asociadas con las producciones se
analizan a mano
No necesita construir un grafo de dependencias de forma
explcita

Mtodos sin recuerdo

Para realizar el orden de evaluacin no tiene en cuenta las


reglas semnticas. Por ejemplo en el momento de anlisis
sintctico.
No necesita construir un grafo de dependencias de forma
explcita

Evaluacin Ascendente de Definiciones


con
Atributos
Sintetizados
(I) se pueden evaluar
Los atributos
sintetizados
con un analizador sintctico ascendente
conforme la entrada es analizada
El analizador sintctico conserva en su pila
los valores de los atributos sintetizados
asociados a los smbolos gramaticales
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.

Evaluacin Ascendente de Definiciones


con
Atributos
Ejemplo Sintetizados (II)
Produccin
L->E n
E->E1 + T
[tope]
E->T
T->T1 * F
[tope]
T->F
F-> ( E )
F->dgito

Fragmento de Cdigo
print (val [tope])
val [ntope] := val [tope-2] + val

val [ntope] := val [tope-2] * val

val [ntope] := val [tope-1]


F.val := dgito.valex

Definiciones con Atributos por


la
Si la traduccin ocurre durante el anlisis sintctico, el
orden de evaluacin de los atributos se corresponde con el
Izquierda
orden en el que se crean los nodos de un rbol de anlisis
sintctico
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 m de n, de izquierda a derecha
hacer empezar
evaluar los atributos heredados de m;
visitarprof (m)
fin;
evaluar los atributos sintetizados de n
fin

Esquema de traduccin
Cada smbolo tiene un conjunto de atributos
asociados
Nombre_de_Smbolo.Nombre_de_Atributo

Las acciones semnticas se intercalan con


los smbolos del consecuente
X::=ab {accion();} b

Orden de evaluacin fijo


Dos tipos

EDT slo con atributos sintetizados


Acciones al final de la produccin

EDT con atributos sintetizados y heredados

Atributos heredados de un smbolo del consecuente


Atributos sintetizados utilizados en acciones
Atributos sintetizados del antecedente

Esquemas de traduccin
Slo con atributos sintetizados

Una accin para cada regla semntica


Se coloca al final del lado derecho de la produccin
Produccin
Regla Semntica
T->T1*F
T.val:=T1.val x F.val
T->T1*F
{T.val:=T1.val x F.val}

Con atributos heredados y sintetizados

Un atributo heredado para un smbolo en el lado


derecho de una produccin debe calcularse en una
accin antes que dicho smbolo.
Una accin no debe referirse a un atributo sintetizado de
un smbolo que est a la derecha de la accin
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).

Generacin de cdigo
intermedio
Proceso de Sntesis
Lenguaje Intermedio
Generacin de Cdigo

Ventajas del cdigo intermedio


Facilitar la fase de optimizacin
Aumentar la portabilidad del compilador
de una mquina a otra
Se puede utilizar el mismo analizador para
diferentes generadores
Se pueden utilizar optimizadores
independientes de la mquina

Facilitar la divisin en fases del proyecto

Esquema del proceso

Tipos de representaciones
intermedias
Notacin Polaca Inversa (RPN)

Los operadores van despus de los operandos


S=A+B*CSABC*+=

Ventajas

Facilidad para generar cdigo a partir de ella


Es la notacin ms sencilla para el lenguaje intermedio

Inconvenientes

El cdigo es difcil de entender


No es til para optimizacin de cdigo

rboles de Sintaxis Abstracta (rbol


Semntico)
Cdigos de tres direcciones
Cuartetos
Tercetos
Tercetos Indirectos

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

Los tercetos resuelven este problema


suprimiendo el operando del resultado,
queda implcito y asociado a dicho terceto
(<OPERADOR>, <Operando1>, <Operando2>)
Hacen referencia a otro terceto
Son equivalentes a rboles de Sintaxis Abstracta

Tercetos y tercetos
indirectos

Los Tercetos Indirectos son anlogos a los


anteriores pero en lugar de ejecutarse
secuencialmente se ejecutan segn un vector
llamado SECUENCIA.
Son ms fciles de optimizar
Ocupan menos memoria, el mismo terceto aparece
una vez

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

Se construyen nombres temporales para


los nodos interiores del rbol sintctico
Se calcula el valor del no terminal E en el
lado izquierdo de E->E1+E2 dentro de un
nuevo temporal t

E.lugar, es el nombre que contendr el valor de


E
E.cdigo, es la secuencia de proposiciones de
tres direcciones que evalan E

La funcin tempnuevo devuelve una


secuencia de nombres distintos
t1, t2,... En sucesivas llamadas

Ejemplos TDS a Tercetos

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)

Se pueden definir las funciones


CreaNodo: crea un nodo del rbol
CreaHoja: crea un nodo hoja

Se aade un parmetro a cada procedimiento


que contiene el rbol generado hasta ese
momento
Adems, se pueden formar grafos dirigidos
para optimizar las expresiones aritmticas

GCI con ASA

Ejemplo GCI

GCI Asignaciones con


cuartetos

GCI Expresiones lgicas

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 :

Los lenguajes fuente y objeto.


Gestin de memoria y registros
Juego de instrucciones
Orden de evaluacin

Generacin de cdigo

Estrategias

Potrebbero piacerti anche