Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Universidad Nacional Autónoma de México Facultad de Ingeniería Compiladores Grupo: 06 - Semestre: 2023-1 Tarea: Manejo de Buffers de Entrada. Fecha de entrega: 01/11/2022 Profesor: Valdez Sánchez Sergio Ing. Alumno: Téllez González Jorge Luis Facultad de Ingeniería Compiladores______________________________________________________________________________________________________________ Introducción El Analizador Léxico representa la primer fase del proceso de compilación, siendo su función principal el leer los caracteres de entrada de un programa fuente y veri�car a qué tipo de componentes léxicos pertenecen; información que posteriormente se envía de vuelta al analizador sintáctico. Este proceso considera lo siguientes: ● Lee un caracter de izquierda a derecha hasta encontrar una coincidencia con un patrón conocido. ● Guarda el patrón encontrado en una tabla de símbolos. ● Retorna nuevamente para identi�car otro componente léxico. Además de lo anterior, se identi�can y eliminan todos los espacios en blanco y comentarios que haya en el programa fuente. Dentro de los componentes léxicos se tienen los siguientes: ● Lexemas: también conocidas como cadenas de caracteres, representan todas las cadenas del programa fuente que tienen un signi�cado de acuerdo con un patrón de�nido por la sintaxis del lenguaje para un componente léxico. ● Patrones: se re�eren a un conjunto de reglas que describen a cada uno de los componentes léxico de acuerdo a ciertas características especí�cas que lo identi�quen. ● Tokens: unidad lógica creada por el analizador léxico, que representa información especí�ca: un operando, operador, función, etc. que corresponde a un lexema. Ejemplo de esto son las palabras reservadas, operadores de relación, comparación, lógicos, variables, símbolos especiales, entre otros. Figura 1. Flujo de operación del Analizador Léxico. 2 Facultad de Ingeniería Compiladores______________________________________________________________________________________________________________ Desarrollo El analizador léxico lee los caracteres de entrada del programa fuente y los agrupa en diferentes tipos de componentes léxico, escaneando la entrada de izquierda a derecha de caracter en caracter hasta encontrar una coincidencia con un patrón. Identi�cado este, lo almacena en la tabla de símbolos y retorna a buscar nuevamente otro componente léxico. Figura 1. La lectura de una cadena se realiza de izquierda a derecha, y de un solo caracter por paso. Un bu�er se re�ere a un espacio de almacenamiento temporal de entrada o salida de datos cuando están en un proceso de transferencia. El el análisis léxico se emplea un buffer para realizar la compilación en el menor tiempo posible y, además, no consumir toda la memoria de la que dispone durante las comparaciones. Debido a que este proceso de lectura es computacionalmente costoso, la implementación de buffers se vuelve necesaria para realizar la lectura de forma e�ciente. Para implementar esta técnica, se tienen 2 variantes principales, que se verán a continuación. Pareja de Bu�ers Esta técnica considera un buffer dividido en 2 partes de N caracteres cada una. 2 apuntadores se contrarán recorriendo el buffer, el apuntador delantero/avanza examina hacia adelante la primer mitad del buffer hasta encontrar una coincidencia con un patrón, mientras que el segundo apuntador llamado lexema recorre el buffer procesando los lexemas que encuentre a la entrada (al inicio de cada lexema). Una vez que se reconoce un componente léxico ambos apuntadores se colocarán en la misma posición detrás del lexema reconocido. Este proceso de repite hasta �nalizar la primer mitad del buffer dividido, y después, se repite el proceso en la segundo mitad hasta leer todo el archivo. 3 Facultad de Ingeniería Compiladores______________________________________________________________________________________________________________ Figura 2. Pareja de buffers y su pseudocódigo. Al momento de implementarlo, se debe de considerar lo siguiente: ● El análisis léxico es una subrutina del análisis sintáctico que devuelve el tipo de componente léxico y el lexema cada vez que es llamada. ● Usar un tipo enumerado para los tipos de componentes léxicos. Usar un tipo enumerado para los estados del analizador. ● En el analizador léxico debe haber una función que se encarga de gestionar el bu�er de entrada. Se leerá una línea que se almacenará en un vector de caracteres. Cuando haya sido procesada se carga de nuevo. ● Almacenar en variables el número de línea y columna para emitir mensajes de error. ● Las palabras reservadas se reconocen como identi�cadores y antes de devolver un identi�cador se comprueba si es una palabra reservada o un identi�cador consultando en una tabla previamente inicializada con las palabras reservadas. ● Hay casos en los que es necesario reinsertar un carácter en el bu�er de entrada. 4 Facultad de Ingeniería Compiladores______________________________________________________________________________________________________________ ● Además de los componentes léxicos de�nidos por el lenguaje es conveniente añadir un par especiales para indicar el �nal de �chero y la detección de un error. Bu�er Centinela Al igual que la pareja de buffers, el bu�er se divide en 2 mirades y se emplean 2 apuntadores. A diferencia de la técnica anterior, cada que el apuntador delantero avanza se veri�ca que el bu�er aún no termina, es decir, se veri�ca que no lleguemos todavía al eob (end of buffer). De no ser el caso, se llena la segunda mitad del bu�er y los apuntadores pasan a operar en la segunda mitad. Esta señal tiene el propósito de reducir el tiempo de veri�cación para conocer si se ha llegado límite del bu�er empleando 2 señales de �nalización para cada subbuffer. Figura 3. Técnica del centinela. Referencias Díaz, M.E. (2008). Análisis Léxico. Universidad de Valencia. Consultado el 31 de octubre de 2022 desde: http://informatica.uv.es/docencia/iiguia/asignatu/2000/PL/2008/tema2.pdf Thakur, D. (s.f.). Input Buffering – Compiler Design. Consultado el 31 de octubre de 2022 desde: https://ecomputernotes.com/compiler-design/input-bu�ering Péres, P. I. & Monroy, C. J. J. Autómatas y Compiladores: 2.1. Función del Analizador Léxico. Consultado el 31 de octubre de 2022 desde: http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro32/21_funcin_del_analizador _lxico.html 5 http://informatica.uv.es/docencia/iiguia/asignatu/2000/PL/2008/tema2.pdf https://ecomputernotes.com/compiler-design/input-buffering http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro32/21_funcin_del_analizador_lxico.html http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro32/21_funcin_del_analizador_lxico.html
Compartir