Ing. Francisco Ríos Acosta
Tabla de símbolos en C# y su interacción con el analizador léxico.
Instituto Tecnológico de la Laguna, a 15 de septiembre del 2008.
pag. 1 de 26
Tabla de símbolos en C# y su interacción con el analizador léxico.
FRANCISCO RÍOS ACOSTA
Instituto Tecnológico de la Laguna
Blvd. Revolución y calzada Cuauhtémoc s/n
Colonia centro
Torreón, Coah; México
Contacto : friosam@prodigy.net.mx
Resúmen. Se presenta la implementación de una tabla de símbolos en C#. Generalmente la explicación en
clase de este tema, conlleva una buena cantidad de tiempo que podemos reducir, si empleamos un buen
material donde las especificaciones de la tabla, estén previamente establecidas de manera clara. Un análisis
de los atributos que almacena cada elemento de la tabla de símbolos, requiere de una definición clara acerca
de lo que queremos almacenar y recuperar. Este trabajo propone una clase denominada TablaSimbolos con
atributos y métodos que permitan interactuar con las 3 etapas de análisis de un compilador : análisis léxico,
análisis sintáctico y análisis semántico. Como ejemplo, se construye una aplicación que analiza léxicamente
una entrada usando un objeto oAnaLex perteneciente a la clase Lexico propuesta por R.A. Francisco, que
interactúa con un objeto de la clase TablaSimbolos instalando identificadores, números y cadenas. La
implementación de la tabla de símbolos se ha hecho de acuerdo a la teoría expresada en el libro del “dragón”
Aho, Sethi y Ullman, asi como del libro de Tremblay y Sorenson, ambos libros tratantes del tema de
Compiladores.
Tabla de símbolos en C# y su interacción con el analizador léxico.
Instituto Tecnológico de la Laguna, a 15 de septiembre del 2008.
pag. 3 de 26
Ing. Francisco Ríos Acosta
1
Introducción.
Existen varias maneras de implementar una tabla de símbolos. En este trabajo trataremos una de ellas : abstraer la tabla de
símbolos como un objeto. Nos basaremos en la teoría expuesta en el libro del “dragón” y del Tremblay para realizar la
construcción de la tabla de símbolos. Estableceremos la propuesta de la clase TablaSimbolos de manera que podamos
definir un objeto oTablaSimb, que interactúe en una aplicación Windows C# con un objeto oAnaLex –analizador léxico-.
El análisis léxico lo haremos sobre sentencias de entrada cuya sintaxis está definida por una gramática de contexto libre no
ambigua. Al término del trabajo tendremos construída una aplicación Windows C# que : inicialice la tabla de símbolos, que
permita que el analizador léxico instale identificadores, números y cadenas en ella, y que visualice a los elementos de la
tabla mostrando los atributos almacenados en la etapa de análisis léxico.
Los pasos que seguiremos en las secciones siguientes son :
•
•
•
•
•
•
•
2
Modelo conceptual de una tabla de símbolos.
Lenguaje de ejemplo y la gramática de contexto libre que denota su sintaxis.
Análizador léxico para la gramática.
Análisis de los atributos de los objetos que se almacenan en la tabla de símbolos.
Clase TablaSimbolos.
Instalación de identificadores, cadenas y números.
Visualización de la tabla de símbolos.
Modelo conceptual de la tabla de símbolos.
Básicamente la tabla de símbolos es un arreglo de listas enlazadas. Inicialmente las listas enlazadas deberán estar vacias o
sea que la referencia de su cabecera tiene el valor de null.
0
null
1
null
2
null
3
null
4
null
5
6
…
…
…
n-3
n-2
n-1
null
null
…
…
…
null
null
null
Fig. No. 2.1 Modelo conceptual de la tabla de símbolos para desmenuzamiento de n entradas.
Ing. Francisco Ríos Acosta
Tabla de símbolos en C# y su interacción con el analizador léxico.
Instituto Tecnológico de la Laguna, a 15 de septiembre del 2008.
pag. 4 de 26
Cada nodo en cada lista enlazada representa un símbolo instalado en la tabla por cualquier etapa de la fase de análisis, sea
léxico, sintáctico o semántico. Esta fuera del alcance de estos apuntes, la fase de síntesis.
La inserción de los elementos en la tabla de símbolos requiere de definir una función de desmenuzamiento –hashing-. Cada
símbolo antes de insertarlo en la lista enlazada correspondiente, debe ser procesado por esta función que será la encargada
de decidir hacia que lista enlazada debe instalarse el símbolo en la entrada.
De acuerdo a lo anterior, si deseamos construir una tabla de símbolos sigamos las etapas que a continuación listamos :
•
•
•
•
•
3
Definir la función de desmenuzamiento.
Definir la clase Lista.
Definir la clase Nodo.
Definir la clase TipoElem.
Definir la clase TablaSimbolos.
Lenguaje de ejemplo y su gramática de contexto libre que lo denota.
Durante algunos semestres hemos propuesto un lenguaje para el estudio de las diferentes fases de análisis, consistente de las
instrucciones :
•
•
•
•
•
Declaración de constantes
Declaración de variables
Asignación
Entrada
Salida
Las reglas de sintaxis para incluir las sentencias en este lenguaje de programación propuesto son :
•
•
•
•
•
•
•
El cuerpo del programa es encerrado entre 2 sentencias : inicio y fin.
La declaración de constantes debe ir en primer lugar antes de las declaraciones de variables, sentencias de asignación,
de entrada y de salida. Puede no incluirse la declaración de constantes.
La declaración de variables es la segunda en orden de inserción. Si existe una declaración de constantes, la declaración
de variables debe incluirse después de la de constantes. Puede no existir una declaración de variables.
Después de haber incluido la declaración de constantes y de variables, podemos incluir s
Página siguiente |