Está en la página 1de 5

LAS TABLAS DE SIMBOLOS

Las tablas de smbolos (tambin llamadas tablas de identificadores y tablas de


nombres), realizan dos importantes funciones en el proceso de traduccin: verificar que
la semntica sea correcta y ayudar en la generacin apropiada de cdigo. Ambas
funciones se realizan insertando o recuperando desde la tabla de smbolos los atributos
de las variables usadas en el programa fuente. Estos atributos, tales como: el nombre,
tipo, direccin de almacenamiento y dimensin de una variable, usualmente se
encuentran explcitamente en las declaraciones o ms implcitamente a travs del
contexto en que aparecen los nombres de variables en el programa.
Una de las estructuras de datos que se encuentran relacionadas con las fases del proceso
de compilacin es la tabla de smbolos, la cual tiene como propsito registrar
informacin que se comparte entre varias etapas y que permite administrar los recursos
asociados a las entidades que manipular el programa. La tabla de smbolos tiene
tpicamente la siguiente estructura:
Una tabla de smbolos puede conceptualizarse como una serie de renglones, cada uno de
los cuales contiene una lista de valores de atributos que son asociados con una variable
en particular. Las clases de los atributos que aparecen en una tabla de smbolos
dependen en algn grado de la naturaleza del lenguaje de programacin para el cual se
escribe el compilador. Por ejemplo, un lenguaje puede ser sin tipos, y por lo tanto el
atributo tipo no necesita aparecer en la tabla. Similarmente, la organizacin de la tabla
de smbolos variar dependiendo de las limitaciones de memoria y tiempo de acceso
MANEJO DE ERRORES
Es una de las misiones ms importantes de un compilador, aunque, al mismo tiempo, es
lo que ms dificulta su realizacin.
A veces unos errores ocultan otros.
A veces un error provoca una avalancha de muchos errores que se solucionan
con el primero.
Es conveniente un buen manejo de errores, y que el compilador detecte todos los errores
que tiene el programa y no se pare en el primero que encuentre. Hay, pues, dos criterios
a seguir a la hora de manejar errores:
o Pararse al detectar el primer error.
o Detectar todos los errores de una pasada.
ANLISIS LXICO
El analizador lxico, tambin conocido como scanner, lee los caracteres uno a uno desde la
entrada y va formando grupos de caracteres con alguna relacin entre s (tokens), que
constituirn la entrada para la siguiente etapa del compilador. Cada token representa una
secuencia de caracteres que son tratados como una nica entidad. Por ejemplo, en Pascal un
token es la palabra reservada BEGIN, en C: WHILE, etc.
Hay dos tipos de tokens: tiras especficas, tales como palabras reservadas (if, while, begin,
etc.), el punto y coma, la asignacin, los operadores aritmticos o lgicos, etc.; tiras no
especficas, como identificadores, constantes o etiquetas. Se considera que un token tiene dos
partes componentes: el tipo de token y su valor. Las tiras especficas slo tienen tipo (lo que
representan), mientras que las tiras no especficas tienen tipo y valor. Por ejemplo, si
"Contador" es un identificador, el tipo de token ser identificador y su valor ser la cadena
"Contador".
El Analizador Lxico es la etapa del compilador que va a permitir saber si es un lenguaje de
formato libre o no. Frecuentemente va unido al analizador sintctico en la misma pasada,
funcionando entonces como una subrutina de este ltimo. Ya que es el que va leyendo los
caracteres del programa, ignorar aquellos elementos innecesarios para la siguiente fase,
como los tabuladores, comentarios, espacios en blanco, etc.

ANLISIS SINTCTICO
El analizador sintctico, tambin llamado parser, recibe como entrada los tokens que le pasa el
Analizador Lxico (el analizador sintctico no maneja directamente caracteres) y comprueba si
esos tokens van llegando en el orden correcto (orden permitido por el lenguaje). La salida
"terica" de la fase de anlisis sintctico sera un rbol sintctico.
As pues, sus funciones son:

Aceptar lo que es vlido sintcticamente y rechazar lo que no lo es.


Hacer explcito el orden jerrquico que tienen los operadores en el lenguaje de que se
trate. Por ejemplo, la cadena A/B*C es interpretada como (A/B)*C en FORTRAN y comoA/(B*C)
en APL.
Guiar el proceso de traduccin (traduccin dirigida por la sintaxis).
Anlisis Semntico
El anlisis semntico es posterior al sintctico y mucho ms difcil de formalizar que ste. Se
trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que
tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles
entre s, etc. En definitiva, comprobar que el significado de lo que se va leyendo es vlido.
La salida "terica" de la fase de anlisis semntico sera un rbol semntico. Consiste en un
rbol sintctico en el que cada una de sus ramas ha adquirido el significado que debe tener. En
el caso de los operadores polimrficos (un nico smbolo con varios significados), el anlisis
semntico determina cul es el aplicable.

Analizando en detalle el proceso de compilacin, se divide en dos grandes fases, una


de Anlisis y la otra de Sntesis.
Fase de Anlisis:
En el llamado anlisis lexicogrfico o lxico, el compilador revisa y controla que las
"palabras" estn bien escritas y pertenezcan a algn tipo de token (cadena) definido
dentro del lenguaje, como por ejemplo que sea algn tipo de palabra reservada, o si es el
nombre de una variable que este escrita de acuerdo a las pautas de definicin del
lenguaje. En esta etapa se crea la tabla de smbolos, la cual contiene las variables y el
tipo de dato al que pertenece, las constantes literales, el nombre de funciones y los
argumentos que reciben etc.
En el anlisis sintctico como su nombre lo indica se encarga de revisar que los
tokens estn ubicados y agrupados de acuerdo a la definicin del lenguaje. Dicho de
otra manera, que los tokens pertenezcan a frases gramaticales validas, que el compilador
utiliza para sintetizar la salida. Por lo general las frases gramaticales son representadas
por estructuras jerrquicas, por medio de rboles de anlisis sintctico. En esta etapa se
completa la tabla de smbolos con la dimensin de los identificadores y los atributos
necesarios etc.
El anlisis semntico se encarga de revisar que cada agrupacin o conjunto de token
tenga sentido, y no sea un absurdo. En esta etapa se rene la informacin sobre los tipos
para la fase posterior, en esta etapa se utiliza la estructura jerrquica de la etapa anterior
y as poder determinar los operadores, y operandos de expresiones y preposiciones.
Fase de Sntesis:
Etapa de generacin de cdigo intermedio, aunque algunos compiladores no la
tienen, es bueno saber de su existencia, en esta etapa se lleva el cdigo del programa
fuente a un cdigo interno para poder trabajar mas fcilmente sobre l. Esta
representacin interna debe tener dos propiedades, primero debe ser fcil de representar
y segundo debe ser fcil de traducir al cdigo objeto.
En la etapa de optimizacin de cdigo, se busca obtener el cdigo mas corto y rpido
posible, utilizando distintos algoritmos de optimizacin.
Etapa de generacin de cdigo, se lleva el cdigo intermedio final a cdigo maquina
o cdigo objeto, que por lo general consiste en un cdigo maquina relocalizable o
cdigo ensamblador. Se selecciona las posiciones de memoria para los datos (variables)
y se traduce cada una de las instrucciones intermedias a una secuencia de instrucciones
de maquina puro.
La tabla de smbolos no es una etapa del proceso de compilacin, sino que una tarea,
una funcin que debe realizar el proceso de compilacin. En ella se almacenan los
identificadores que aparecen en el cdigo fuente puro, como as tambin los atributos de
los mismos, su tipo, su mbito y en el caso de los procedimientos el nmero de
argumentos el tipo de los mismos etc. En otras palabras una tabla de smbolos es una
estructura de datos, que contiene un registro por cada identificador, y sus atributos. La
tabla de smbolo es accedida tanto para escritura como parar lectura por todas las etapas.
Detector de errores o manejador de errores, al igual que la tabla de smbolos no es
una etapa del proceso de compilacin, si no que es una funcin, muy importante, pues al
ocurrir un error esta funcin debe tratar de alguna forma el error para as seguir con el
proceso de compilacin (la mayora de errores son detectados en las etapas de anlisis
lxico, anlisis sintctico, anlisis semntico).

Anlisis Lxico
El analizador lxico lee los caracteres del programa fuente, y verifica que
correspondan a una secuencia lgica (identificador, palabra reservada etc.). Esta
secuencia de caracteres recibe el nombre componente lxico o lexema. En este caso el
analizador lxico verifica si el identificador id1 (nombre interno para "suma")
encontrado se halla en la tabla de smbolos, si no esta produce un error porque todava
no fue declarado, si la preposicin hubiese sido la declaracin del identificador "suma"
en lenguajes C, C++ (int suma;) el analizador lxico agregaria un identificador en la
tabla de smbolos, y as sucesivamente con todos los componentes lxicos que
aparezcan.
id1= id2+ id3 * 10
Anlisis Sintctico
El analizador sintctico impone una estructura jerrquica a la cadena de componentes
lxicos, generada por el analizador lxico, que es representada en forma de un rbol
sintctico.
=
/ \
id1 +
/ \
id2 +
/ \
id3 10
Anlisis Semntico
El analizador semntico verificara en este caso que cada operador tenga los operandos
permitidos.
=
/ \
id1 +
/ \
id2 +
/ \
id3 tipo_ent
|
10
Generador de cdigo intermedio
En esta etapa se lleva la preposicin a una representacin intermedia como un
programa para una maquina abstracta.
temp1= tipo_ent(10)
temp2= id3 * temp1
temp3= id2 + tem2
id1= temp3
Optimizacin de cdigo

El cdigo intermedio obtenido es representado de una forma mas optima y eficiente.


temp1= id3 * 10.0
id1= id2 + temp1
Generador de cdigo
Finalmente lleva el cdigo intermedio a un cdigo objeto que en este caso es un
cdigo relocalizable o cdigo ensamblador (tambin llamado cdigo no enlazado).
MOVF id3, R2
MULT #10.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
Este el cdigo objeto obtenido que es enviado al modulo de ensamblado. Para
entender todo esto veamos un ejemplo utilizando como lenguaje en este caso al popular
lenguaje de programacin C creado por Kernighan y Ritchie. El siguiente cdigo esta
definido de acuerdo al standard ANSI C

También podría gustarte