Logo Studenta

Tarea1_Buffers_TGJL

¡Estudia con miles de materiales!

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

Otros materiales

Materiales relacionados