Analisis Lexico
Analisis Lexico
Analisis Lexico
“ANÁLISIS LÉXICO”
LENGUAJES Y AUTOMATAS I
PRESENTA:
OSWALDO ZÚÑIAG HERNÁNDEZ
Análisis léxico
La fase de rastreo (scanner), tiene las funciones de leer el programa fuente como un archivo
de caracteres y dividirlo en tokens. Los tokens son las palabras reservadas de un lenguaje,
secuencia de caracteres que representa una unidad de información en el programa fuente. En
cada caso un token representa un cierto patrón de caracteres que el analizador léxico
reconoce, o ajusta desde el inicio de los caracteres de entrada. De tal manera es necesario
generar un mecanismo computacional que nos permita identificar el patrón de transición entre
los caracteres de entrada, generando tokens, que posteriormente serán clasificados. Este
mecanismo es posible crearlo a partir de un tipo especifico de máquina de estados llamado
autómata finito.
Es la primera fase de un compilador. Su principal función consiste en leer la secuencia de
caracteres del programa fuente, carácter a carácter, y elaborar como salida la secuencia de
componentes léxicos que utiliza el analizador sintáctico. El analizador sintáctico emite la
orden al analizador léxico para que agrupe los caracteres y forme unidades con significado
propio llamados componentes léxicos (tokens). Los componentes léxicos representan:
El analizador léxico recoge información sobre los componentes léxicos en sus atributos
asociados. Los tokens influyen en las decisiones del análisis sintáctico, y los atributos, en la
traducción de los tokens. En la práctica los componentes léxicos suelen tener solo un atributo.
Para efectos de diagnóstico, puede considerarse tanto el lexema para un identificador como
el número de línea en el que se encontró por primera vez. Esta información puede ser
almacenada en la tabla de símbolos para el identificador (estructura de datos).
Para la cadena E=M*C**2 de ejemplo, los componentes léxicos y los valores de atributo
asociado son:
Tome en cuenta que ciertas parejas no necesitan un valor de atributo. Los atributos
relacionados con ese token deberán ser conservados y transferidos a alguna estructura de
datos para que sean empleados en las siguientes etapas del análisis
Manejo de Buffer de entrada
Existen algunos aspectos de eficiencia relacionados con el manejo de buffer. Primero se
menciona un esquema de doble buffer de entrada que resulta útil como pre-análisis de la
entrada para identificar los componentes léxicos. El segundo esquema introduce algunas
técnicas útiles para aumentar la eficiencia del analizador léxico, empleando “centinelas”.
Hay veces en que el analizador léxico necesita analizar previamente varios caracteres, además
del lexema para un patrón, antes de poder anunciar una concordancia. Se pueden emplear
muchos esquemas de manejos de buffer, pero, aquí tan solo se señalarán algunos principios
básicos.
Parejas de buffer – Se utiliza un buffer dividido en dos mitades de N (1024 o 512) caracteres
cada una, Se leen N caracteres de entrada en cada mitad del buffer con un orden de lectura
del sistema, en vez de invocar una instrucción de lectura para cada carácter de entrada. Si
quedan menos de N caracteres en la entrada, entonces se lee un carácter especial eof en el
buffer después de los caracteres de entrada. Es decir, eof marca el final del archivo fuente y
es distinto a cualquier carácter de la entrada.
Se mantienen dos apuntadores en el buffer de entrada. La cadena de caracteres entre los dos
apuntadores es el lexema en curso. Al principio, los dos apuntadores apuntan al primer
carácter del próximo lexema que hay que encontrar. Uno de ellos, apuntador delantero,
examina hacia adelante hasta encontrar una concordancia con un patrón. Una vez
determinado el siguiente lexema, el apuntador delantero se coloca en el carácter de su
extremo derecho. Después de haber procesado el lexema, ambos apuntadores se colocan en
el carácter situado inmediatamente después del lexema. Con este esquema se pueden
considerar los comentarios y los espacios en blanco como patrones que no producen
componentes léxicos.
Centinela – Corrigiendo la deficiencia del método anterior para reducir la necesidad de dos
pruebas para cada avance del apuntador delantero. Se amplia cada mitad del buffer para
admitir un carácter centinela al final. De esta manera se vuelve más eficiente el proceso de
cargar del buffer, realizando una carga en cada mitad.
Empezamos en el estado inicial q0, y estamos leyendo un fichero con código fuente donde
tenemos escrito a2 = b + 5. Empezamos reconociendo una letra, con lo que pasamos del
estado q0, al estado q1 (hemos reconocido a, de la variable a2). Leemos el siguiente carácter,
con lo que entra el 2, y nos quedamos en el mismo estado que ya estábamos q1 (ya hemos
reconocido a2) que todavía no es un estado final. Leemos el espacio en blanco o bien el signo
=, si el analizador elimina los espacios en blanco, por tanto, el siguiente carácter es distinto
de una letra o un número, con lo que saltamos al estado q2, que este si es un estado final, y
ya se ha reconocido a2, pasándose el identificador al analizador sintáctico, que nada más
recibirlo solicitará otro token al analizador léxico.
IMPLEMENTACIÓN DE UN ANALIZADOR LÉXICO
ERRORES LÉXICOS
Son detectados, cuando durante el proceso de reconocimiento de caracteres,
los símbolos que tenemos en la entrada no concuerdan con ningún patrón. Hay
que tener en cuenta que hay pocos errores detectables por el analizador léxico
Nombres incorrectos de los identificadores
Se debe a que se utilizan caracteres inválidos para ese patrón, como por
ejemplo un paréntesis, o se empieza por un número.
Números incorrectos
Debido a que está escrito con caracteres inválidos (puntos en lugar de comas) o
no está escrito correctamente.
Palabras reservadas escritas incorrectamente
Se producen errores de ortografía. El problema aquí es cómo distingues
entre un identificador y una variable reservada. Caracteres que no
pertenecen al alfabeto del lenguaje
Ejemplos: @, €, ¿, ?, ñ, etc.
ESTRATEGIA DE RECUPERACIÓN DE ERRORES
Modo pánico
Consiste en borrar de forma sucesiva caracteres de la entrada hasta que el
analizador léxico es capaz de encontrar un token bien formado.
¿Cuál sería el proceso para tratar el error?
Anotar el error y el estado.
Recuperarse. Tenemos varias alternativas: Ignorar, borrar,
insertar, remplazar o conmutar.
Seguir.
Intentar transformaciones
La mayoría de los analizadores que implementan esta estrategia la aplican
cuando se corrige el lexema con una sola transformación. Ejemplo -25, j
• Eliminamos los dos últimos caracteres quedándonos con -25,
quedándonos en un estado de aceptación.
• Devolvemos a la entrada. j
• Nos posicionamos en el estado inicial.
• En la siguiente lectura tendremos otro error teniendo que descartar la
coma, volviendo al estado inicial
• En la siguiente lectura se reconoce el identificador j.
CONCLUSIÓN
El analizador léxico es la forma en como un programa puede revisar o analizar
un código fuente de otro programa con el fin de que este le de salida por medio
de símbolos. Estos símbolos están compuestos por definiciones básicas que hay
dentro de un analizador léxico, que serían las definiciones: Token: Que es la
agrupación de caracteres que identifica el analizador que se componen por
símbolos. Lexema: Es la secuencia de caracteres ya agrupados que tienen
en común con un token. Patrón: Es como se describe o se da el nombre de los
tipos de lexema. De igual forma observamos mediante un ejemplo de cómo
funciona un analizador léxico y como se construye gracias a una expresión
regular del autómata finito que lo soporta. Con esta información se ha conocido
como se diseña un analizador léxico mediante tablas o diagrama de
transacciones, que representan los estados por los que pasa el analizador a
reconocer un token. Se ha observado 3 formas en las que se puede reconocer un
identificador que serían: generador de analizadores léxicos, lenguaje de alto
nivel y lenguaje de bajo nivel. Los errores léxicos se pueden detectar ya que con
esto nos ayudaría a eliminar errores o minimizar el problema que se tendrá en
el compilador.
BIBLIOGRAFIAS
http://informatica.uv.es/docencia/iiguia/asignatu/2000/PL/2008/tema2.pdf
http://www.cc.uah.es/ie/docencia/ProcesadoresDeLenguaje/ProcesadoresDeLenguajeTema
2_1xpagina.pdf
https://pdfcoffee.com/ensayo-analisis-lexicodocx-5-pdf-free.html/
http://www.uco.es/users/ma1fegan/2019-2020/pl-grado/temas/Tema-2-lexico.pdf
https://www.studocu.com/es-ar/document/instituto-tecnologico-de-cancun/ingenieria-ensistemas-
computacionales/resumen-de-analisis-lexico-automatas/14242612