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 : [email protected]
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 |