Académique Documents
Professionnel Documents
Culture Documents
Lenguajes y Autmatas II
Ejemplos
Comprobaciones llevadas por el analizador
semntico:
Declaracin de identificadores y reglas de mbito.
Comprobaciones de unicidad
Comprobaciones de enlace
Compilador
Front-end
Analiza un programa fuente y crea un
representacin intermedia
Detalle del lenguaje
Back-end
Genera el cdigo destino
Detalles de la mquina
Comprobacin esttica:
Comprobacin de tipos.
Operandos
operador
Comprobacin sintctica.
Representaciones intermedias
rboles sintcticos
Cdigo de tres direcciones
x = y op z
Comprobacin de Enlace
En un lenguaje de programacin el empleo de
un elemento ha de estar ligado a una utilizacin
COMPROBACIN DE UNICIDAD
Comprobacin esttica
Este tipo de verificaciones se lleva a cabo en
tiempo de compilacin.
Comprobacin dinmica
Este tipo de comprobaciones se llevan a cabo en
tiempo de ejecucin.
COMPROBACIN DE TIPO
Verifica las operaciones que se pueden aplicar a
cada construccin del lenguaje e infiere el tipo
de construccin de cada lenguaje.
RBOL SINTCTICO
Es la representacin de la estructura de una
consecucin de componentes lxicos, en la que
stos aparecen como como nodos hoja y los
nodos internos representan los pasos en las
derivaciones de la gramtica asociada
Ejemplo:
Suponga una entrada como:
3*2*1
El analizador lxico:
Evala la cadena de entrada, y al reconocer el patrn,
convierte cada lexema en un componente lxico.
La entrada es: 3 * 2 * 1
Despus del anlisis lxico:
num * num * num
num.3
*.vaco
num.2
*.vaco
num.1
Reglas semnticas
{E1 = E2 + T;}
{E = T;}
{T1 = T2 * F;}
{T = F;}
{F = E;}
{F = num ;}
Esquemas de traduccin
Se insertan fragmentos de programa, llamados acciones
semnticas.
Las acciones semnticas se pueden situar en cualquier posicin
dentro del cuerpo de una produccin, determinando el orden
en el que se ejecuta la accin.
T.her = F.val
T.val = T.sin
T -> * F T1
T ->
T.sin = T.her
F -> digito
F.val = digito.valor
Grafos de dependencias
Flujo de informacin entre las instancias de
atributos en un rbol de anlisis sintctico.
La flecha de una instancia de un atributo a otro,
significa que el valor de la primera se necesita
para calcular la segunda.
Las flechas expresan las restricciones que
imponen las reglas semnticas.
Orden de evaluacin
El grafo de dependencias caracteriza los
rdenes posibles en los cuales se puede
evaluar los atributos en los diversos nodos de
un rbol de anlisis sintctico.
El ordenamiento que se incrusta en un grafo
dirigido es un orden lineal, a lo cual se le
conoce como orden topolgico del grafo.
Implementacin
Se implementan durante el anlisis sintctico.
Construir un rbol sintctico
Realizar las acciones semnticas en un orden
de izquierda a derecha, con un recorrido
preorden.
Comprobacin de Tipos
Asegura de que el tipo de construccin
coincida con el previsto en su contexto.
Se puede implementar una funcin encargada
de comprobacin de tipos que se encontrara
despus del analizador sintctico y antes del
generador de cdigo intermedio.
Sistemas de Tipos
El diseo de un comprobador de tipos para un
lenguaje se basa en informacin acerca de las
construcciones sintcticas del lenguaje, la
nocin de tipos y las reglas para asignar tipos
a las construcciones del lenguaje.
Ejemplo
Si ambos operandos de los operadores
aritmticos de suma, sustraccin y
multiplicacin son de tipo entero, entonces el
resultado es de tipo entero.
Expresiones de tipos
El tipo de una construccin de un lenguaje se
denotar mediante una expresin de tipo.
Tipo bsico: es una expresin de tipo y un tipo
bsico especial error_tipo.
Constructores bsicos: pueden ser matrices,
productos, registros, objetos, apuntadores,
funciones, entre otros.
Sistema de tipos
Serie de reglas para asignar expresiones de
tipos a las distintas partes de un programa.
Se encuentra contenido en comprobador de
tipos.
Comprobacin esttica y
dinmica de tipos
Compilador esttica
Ejecuta el programa objeto dinmica
Cualquier verificacin se puede realizar
dinmicamente, si el cdigo objeto carga el
tipo de un elemento junto con el valor de
dicho elemento.
Ejercicio - Binas
Considere la siguiente gramtica:
L -> E
E -> E1 + T
E -> T
T -> T1 * F
T -> F
F -> (E)
F -> digito
L.val = E.val
E.val = E1.val + T.val
E.val = T.val
T.val = T1.val * F.val
T.val = F.val
F.val = E.val
F.val = digito.lexval
Ejercicio - Binas
Considere la siguiente gramtica:
D -> T L
L.her = T.tipo
T -> int
T.tipo = integer
T -> float
T.tipo = float
L -> L1, id
L1.her = L.her
Agregar(id.entrada,L.her)
L -> id
Agregar(id.entrada,L.her)