Professional Documents
Culture Documents
SANTIAGO ANTNEZ DE
MAYOLODE
FACULTAD
CIENCIAS
INGENIERA DE
SISTEMAS E INFORMTICA
TEORA DE LENGUAJES
DOCENTE
EL PROCESO DE COMPILACIN
el proceso de compilacin para
su estudio y mejor comprensin
esta dividido en dos etapas:
etapa de sntesis: se
genera todo el cdigo y
optimizaciones
necesarias
basndose en las estructuras
de la etapa anterior.
INTRODUCCIN:
La tabla de smbolos es la componente del compilador que se encarga de todos los
aspectos dependientes del contexto relacionados con las restricciones impuestas a los
nombres que puedan aparecer en los programas (nombres de variables, constantes,
funciones, palabras reservadas). Estas restricciones obligan a llevar la cuenta, durante
todo el proceso de compilacin de los nombres utilizados (junto con toda la informacin
relevante que se deduzca de la definicin del lenguaje de programacin), para poder
realizar las comprobaciones e imponer las restricciones necesarias.
TABLA DE SMBOLOS
TABLA DE SMBOLOS
OBJETIVOS:
Colaborar con las comprobaciones semnticas.
Facilitar ayuda a la generacin de cdigo.
Efectuar chequeos semnticos.
TABLA DE SMBOLOS
CARACTERSTICAS:
TABLA DE SMBOLOS
USOS:
La informacin contenida en la tabla de smbolos se usa en la fase de anlisis y sntesis,
OPERACIONES CON LA TS
En las primeras fases del compilador las operaciones ms usuales en ese
momento son la insercin y actualizacin de smbolos. La forma en que se
realizan estas dos operaciones difiere levemente segn que las declaraciones
del lenguaje a compilar sean explcitas o implcitas.
OPERACIONES CON LA TS
En las fases posteriores, en la generacin de cdigo intermedio y cdigo objeto, la
tabla de smbolos se utiliza para comprobar si un identificador existe o no y saber
cules son sus atributos, no producindose nuevas inserciones y quedando la
modificacin de atributos como algo puntual. La operacin que se ejecuta
continuamente es la bsqueda/consulta sobre la tabla de smbolos.
OPERACIONES CON LA TS
En las fases posteriores, en la generacin de cdigo intermedio y cdigo objeto, la
tabla de smbolos se utiliza para comprobar si un identificador existe o no y saber
cules son sus atributos, no producindose nuevas inserciones y quedando la
modificacin de atributos como algo puntual. La operacin que se ejecuta
continuamente es la bsqueda/consulta sobre la tabla de smbolos.
OPERACIONES CON LA TS
Operaciones con Lenguajes Estructurados de
Bloques
Operaciones de activacin y desactivacin de
tablas de smbolos
Los lenguajes estructurados en bloques tienen dos
operaciones adicionales llamadas set y reset.
La operacin de set se utiliza cuando el compilador
detecta el comienzo de un bloque o mdulo en el cual
se pueden declarar identificadores locales o
automticos. La operacin complementaria reset, se
utiliza cuando se detecta el final del bloque o mdulo.
OPERACIONES CON LA TS
En resumen, las operaciones que debern ejecutarse sobre la tabla de smbolos durante el proceso de
compilacin sern las siguientes:
Bsqueda/Consulta: Es la operacin que ms se repite en todas las fases, a fin de comprobar si un
smbolo ya existe o ha de insertarse como nuevo, encontrar los atributos asociados a un smbolo para
leerlos o modificarlos o borrar un smbolo de la tabla. Las otras tres operaciones normalmente
siempre implican una bsqueda previa.
Actualizacin: En los compiladores de una sola pasada la fase de anlisis lxico se encarga de crear
la tabla de smbolos e introducir en ella los identificadores, pero la asociacin de la mayora de los
atributos queda en manos del anlisis semntico, que debe localizar cada smbolo y actualizarlo.
Insercin: Una vez creada la tabla de smbolos hay que introducir en ella las parejas (identificador,
atributos) a medida que se analiza el cdigo fuente, tarea de la que se ocupa el analizador lxico o el
semntico, dependiendo de los casos. Segn el tipo de lenguaje es posible que en la tabla existan
varios smbolos con un mismo identificador pero con distintos atributos.
Borrado: Se produce cuando un smbolo queda fuera de mbito y, por tanto, deja de existir.
ESTRUCTURAS DE DATOS
SUBYACENTES
Lo fundamental a la hora de decidirse sobre la estructura de datos subyacente
que se emplear para mantener la tabla de smbolos ser:
El tipo de lenguaje a procesar porque de ello depender que se tenga que
trabajar con claves duplicadas que tendrn asociado un mbito o nivel.
La eficiencia en la bsqueda de claves, al ser sta la operacin que se
ejecuta con mayor frecuencia sobre la tabla de smbolos.
ESTRUCTURAS DE DATOS
SUBYACENTES
Listas o Tablas sin Orden
Una de las estructuras de datos ms sencillas que pueden utilizarse es una lista o una tabla (vector) en la que no
se mantiene orden, de manera que las operaciones pueden ejecutarse con los siguientes rdenes de eficiencia:
ESTRUCTURAS DE DATOS
SUBYACENTES
Listas o Tablas con Orden
En lugar de usar listas o vectores sin orden, podra utilizarse la clave para mantener los
elementos ordenados a fin de mejorar la eficiencia en la bsqueda de smbolos. La existencia
de orden permitira utilizar un algoritmo de bsqueda dicotmica o binaria, cuyo orden de
eficiencia es logartmico: O (log n). Puesto que la bsqueda es una operacin previa a todas las
dems, esta mejora influira globalmente en la gestin de la tabla de smbolos.
ESTRUCTURAS DE DATOS
SUBYACENTES
rboles Binarios
Se trata de una estructura con una eficiencia aceptable para las distintas operaciones que se necesitan
siempre que se mantenga equilibrado, ya que de lo contrario pueden terminar convirtindose en una
lista y la bsqueda sera secuencial. Los ms apropiados seran los rboles AVL o los rboles rojo - negro.
ESTRUCTURAS DE DATOS
SUBYACENTES
Tablas Hash
Las tcnicas de hashing hacen posible mantener tablas de datos con acceso por clave con un orden de
eficiencia terico de O (1) para todas las operaciones, lo que les hace ideales para el mantenimiento de una
tabla de smbolos. Ese orden de eficiencia terico se alcanzar en mayor o menor medida dependiendo del
algoritmo de hashing que se emplee y de que ste resulte adecuado para el tipo de claves utilizadas.
ESTRUCTURAS DE DATOS
SUBYACENTES
Tablas Locales
La tabla de smbolos local de una clase o de cualquier otra estructura de datos compleja, como
puede ser un registro en Pascal, se genera en el momento en que se analiza la definicin de ese
nuevo tipo de dato. Al utilizar la notacin objeto.identificador (o equivalente segn el lenguaje) el
compilador debe localizar el identificador no en la tabla de smbolos general, sino en la tabla local
que corresponde al tipo de ese objeto.
CONTENIDO DE LA TS
Antes de que se inicie la primera fase de la compilacin, el compilador puede
cargar la tabla de smbolos con algunos elementos que resultan de utilidad
durante el anlisis lxico y la generacin de cdigo. Algunas posibilidades son:
Palabras reservadas
Si el lenguaje para el que
se escribe el compilador
cuenta con palabras
reservadas, su inclusin
en la tabla de smbolos
permitir al analizador
lxico identificarlas y
facilitar al sintctico los
token correspondientes,
al tiempo que se impide
su redefinicin.
Constantes
predefinidas
Un compilador especfico
para un lenguaje
cientfico, por poner un
ejemplo, podra agregar a
la tabla de smbolos una
serie de constantes de
utilidad (PI, velocidad de
la luz, nmero de
Avogadro, etc.) de forma
que estuviesen
disponibles durante toda
la compilacin.
Tipos de datos
Los identificadores que
representan a los tipos
de datos bsicos del
lenguaje, los intrnsecos,
tambin pueden formar
parte del contenido
inicial de la tabla de
smbolos.
MTODOS
USADO POR
LA TABLA DE
SMBOLOS
MTODO DE LA DIVISIN
Esta funcin tiene la propiedad de preservar la
distribucin uniforme de las claves en el espacio
de direcciones.
Para un divisor m se define como: H(x) = (x mod
m) + 1
Se recomienda que m sea un nmero primo. Debe
evitarse que m sea una potencia de 2, pues en
este caso la hiptesis de que todas las claves son
igualmente probables es errnea.
Por ejemplo, las claves 2000, 2001, 2002, ,
2007 se asignan a las direcciones 82, 83,84, ,
92 con un valor de m = 101.
MTODOS HASH
Posiciones Alternativas
Cuando a varias direcciones diferentes se les
asigna la misma direccin se dice que ha ocurrido
una colisin. Al proceso de generar direcciones
alternativas se le llama manejo de colisiones o
resolucin de colisiones (collision resolution).
Mtodo de Reduccin.
Consiste en partir la clave en grupos de dgitos
con el mismo nmero de dgitos excepto el ltimo
grupo que puede tener un nmero menor. Los
distintos grupos de dgitos se suman excepto el
ltimo, pudindose dar la vuelta al orden de los
dgitos.
Mtodo dependiente de
la Longitud.
MANEJO DE COLISIONES
Es el suceso que se produce cuando se asignan dos
claves a la misma direccin. Cundo ocurre esto se
calcula una direccin alternativa para la segunda
clave, llamndose a este proceso manejo de
colisiones.
Las dos tcnicas ms utilizadas para el manejo de
colisiones son:
Direccionamiento vaco o hash cerrado
Encadenamiento directo o hash abierto
Direccionamiento vaco o
hash cerrado
Consiste en buscar en otros lugares de la tabla hasta que se
encuentre la variable buscada (caso de operacin de bsqueda) o
se llegue a un lugar vaco (en el caso de operacin de insercin
significa que no existe y se puede insertar, en el caso de bsqueda
se termina la operacin infructuosamente).
La forma de buscar otros lugares de la tabla puede hacerse por
medio de varios mtodos.
Inspeccin lineal
Consiste en mirar el lugar siempre el siguiente
lugar de la tabla hasta encontrar la variable
buscada o una posicin vaca. Cuando se llega al
final de la tabla se pasa al primer lugar de la tabla
y se contina buscando. Si se llega al lugar de
partida sin encontrar la variable buscada
entonces no est en la tabla. Si no se encuentra
espacio para introducirla es que la tabla est
llena. La desventaja de que los elementos tienden
a agruparse alrededor de las claves primarias
(claves que han sido insertadas sin colisionar).
Inspeccin Aleatoria
Consiste en generar posiciones aleatorias en vez
de las posiciones ordenadas que se generaban en
la inspeccin lineal. Se genera m posiciones
aleatorias entre 1 y m. La tabla se considera
completa cuando se repite el nmero generado.
Ntese que la
generacin es cclica.
R(y) = (y + c) mod n, para todo c y m PESI
Dnde:
y es la direccin inicial generada por la funcin
hash.
c es una constante.
m es el nmero de registros de la tabla.
Supngase c = 7, m = 11 e y = 3 en un momento
dado, la secuencia generada es la siguiente:
10 6 2 9 5 1 8 4 0 7 3
ENCADENAMIENTO
DIRECTO O HASH ABIERTO
Este mtodo enlaza todos los identificadores que
tienen el mismo ndice primario H(k) en forma de
lista. Es decir, se resuelven las colisiones
utilizando una lista encadenada que une todos los
identificadores
que
tienen
colisin.
La
implementacin de la lista puede ser en forma
dinmica o por medio de otra tabla que se llama
rea de desbordamiento (overflow area).
ENCADENAMIENTO DIRECTO O
HASH ABIERTO.
Encadenamiento directo con tabla
de desbordamiento
ENCADENAMIENTO DIRECTO O
HASH ABIERTO.
Encadenamiento directo con lista
enlazada dinmicamente.
Ejemplos
Ejemplos
Ejemplos
GESTION DE ERRORES
En el caso ms sencillo
puede ser un subprograma al
que se le invoca envindole el
cdigo de error, y que se
encarga de escribir un
mensaje
con
el
error
correspondiente, y el nmero
de lnea donde se ha
producido,
Un buen compilador:
No
demorar
significativamente
el
procesamiento de los programas correctos
Tipos de Errores
ERRORES LXICOS
Un traductor debe adoptar alguna estrategia para detectar, informar y recuperarse para
seguir analizando hasta el final
Las respuestas ante el error pueden ser:
Inaceptables: Provocadas por fallos del traductor, entrada en lazos infinitos, producir
resultados errneos, y detectar slo el primer error y detenerse.
Los errores lxicos se detectan cuando el analizador lxico intenta reconocer componentes
lxicos y la cadena de caracteres de la entrada no encaja con ningn patrn.
Son situaciones en las que usa un carcter invalido (@,$,",>,...), que no pertenece al
vocabulario del lenguaje de programacin, al escribir mal un identificador, palabra
reservada u operador.
Al producirse un error el compilador debe ser capaz de informar del error y seguir
compilando. (Ideal)
Nos interesa que cuando el compilador encuentre un error, se recupere y siga buscando
errores.
o Intenta recuperar el error una vez descubierto. En el caso anterior, por ejemplo,
podra haber sido lo suficientemente inteligente como para insertar el token ;.
Hay que tener cuidado con este mtodo, pues puede dar lugar a recuperaciones
infinitas.
o Correccin Global
o Este mtodo trata por todos los medios de obtener un rbol sintctico para una
secuencia de tokens.
o Si hay algn error y la secuencia no se puede reconocer, entonces este mtodo
deduce una secuencia de tokens sintcticamente correcta lo ms parecida a la
original y genera el rbol para dicha secuencia.
COMPROBACIN DE TIPOS
Operadores Incompatibles
Flujo de Control
CONCLUSIONES:
Una tabla de smbolos es una pieza importante del proceso de compilacin, puesto que en