Tema 10. Dinámica y funciones de la Atmosfera 2024
Analizador lexico
1. ANÁLISIS LÉXICO
Erick Vilchez Agruta
Elizabeth Lopez Vasquez
Dora Callisaya Choquecota
Universidad Nacional Jorge Basadre Grohmann
Escuela Profesional de Ingeniería en Informática y Sistemas
Emails:
darknewman68@gmail.com
elizalopezvasquez@gmail.com
eliza.bella143@gmail.com
RESUMEN
El presente artículo presentaremos la información La segunda que determina la
detallada acerca de cómo funciona el análisis organización sintáctica del programa.
léxico en el entorno de compiladores, mediante el
uso de gramáticas para poder comprender la A lo largo de este artículo, plantearemos los
separación del lenguaje léxico del semántico, objetivos que debe cumplir un Analizador Léxico.
entender los diagramas de transición para lo cual
se detallaran en el siguiente articulo.
1. ANALIZADOR LEXICO
ABSTRACT
1.1. OBJETIVOS
This article presents detailed information about
how the lexical analysis in the compiler Comprender la separación del análisis
environment through the use of grammars to léxico del semántico
understand the separation of lexical semantic Construir expresiones regulares de
language, understanding the transition diagrams gramáticas regulares
which are detailed in the following article. Entender los diagramas de transición
Codificar un analizador léxico a partir de
PALABRAS CLAVES su diagrama de transición
Entender los errores y cómo manejarlos
Analizador, léxico, semántico, scanner,
compilador.
1.2. FUNCIÓN
El análisis léxico representa el enlace entre el
INTRODUCCIÓN programa fuente y el analizador sintáctico. El
análisis léxico, por medio de un examen
Analizar un programa fuente es algo complejo por carácter a carácter, separa el programa
ende será recomendable dividir la fase de análisis fuente en piezas llamadas fichas que
en dos partes: representan todo lo que el programa fuente.
La primera que identifica los 1.3. VENTAJAS
constructores de bajo nivel del lenguaje
(fichas) tales como variables, palabras
llave, etiquetas y operadores.
2. 2 Universidad Nacional Jorge Basadre G.
La búsqueda de caracteres es lenta y al enfatiza el comportamiento
separarla de la semántica se puede dependiente del tiempo del sistema.
dedicar tiempo a su mejora. Este tipo de modelo sólo importaba
Se logra un sistema más simple para una categoría de sistemas
No se entrega más información de la conocido como sistemas de tiempo-
requerida al análisis semántico. real; como ejemplo de estos sistemas
se tienen el control de procesos,
Por ejemplo, es más fácil analizar fichas sistemas de conmutación telefónica,
tales como palabras llave, identificadores sistemas de captura de datos de alta
y operadores en lugar de fichas que son velocidad y sistemas de control y
los caracteres terminales de conjunto de mando militares.
símbolos utilizados por el lenguaje
(A,B,C,... etc.). La primera ficha para una Los componentes de un DTE son:
expresión DO WHILE será DO en lugar
de D que el análisis puede considerar o ESTADOS: comportamiento del
como parte de un lazo en lugar de un sistema que es observable en el
identificador que comienza con D. tiempo. Los sistemas tienen un
estado inicial, pero pueden tener
Se hace más portátil el sistema puesto múltiples estados finales
que las peculiaridades del alfabeto de (mutuamente excluyentes).
entrada se pueden restringir al analizador
léxico. o Cambios de estados: condiciones
Existen herramientas especializadas que y acciones.
ayudan en la construcción de
analizadores léxicos cuando la etapa de
análisis léxico y semántico están
separadas.
1.4. INTERACCION CON EL ANÁLISIS
SEMÁNTICO
El análisis léxico puede interactuar con el
semántico de dos formas: Los nodos del diagrama de estado finito
representan los estados del autómata de
1. El analizador léxico puede realizar estado finito y los estados los nombramos
una pasada completa del programa S, A y B.
fuente antes de que el análisis
semántico comience, las fichas son Los arcos que llevan de un estado a otro
guardadas en una tabla. indican las transiciones de estado y las
etiquetas a un lado de ellos indican la
2. Una interacción entre el analizador entrada que causa la transición. El estado
léxico y semántico, el analizador inicial es S y los nodos concéntricos
léxico es llamado por el semántico indican los estados finales (y aceptación
cuando se requiere la siguiente ficha de la entrada), en este caso B.
del programa fuente.
La segunda forma es el método preferido de
operación puesto que no se requiere de
formar una representación completa interna
del programa fuente en la memoria. Otra
ventaja de este método es que se pueden
escribir distintos analizadores léxicos para el
mismo lenguaje que varíen de acuerdo al
método utilizado para introducir el programa a
la máquina.
1.5. DIAGRAMAS DE TRANSICION
El Diagrama de Transición de Estado
(también conocido como DTE)
Análisis Léxico
3. 3 Universidad Nacional Jorge Basadre G.
sucesivos hasta lograr la
sincronización con alguna palabra
llave conocida y válida en el lenguaje.
1) Algunas otras acciones de
recuperación de errores son:
2) Borrar los caracteres
extraños.
3) Insertar los caracteres
faltantes.
4) Reemplazar un carácter
incorrecto por otro correcto.
5) Trasponer dos caracteres en
posición equivocada.
1.8. ALMACENAMIENTO DE ENTRADA
Si no existe transición designada para un
estado del diagrama, la entrada es Es necesario el programa fuente para
rechazada, tal es el caso de número 12., poderlo analizar y entregar las fichas
un diagrama de estado finito se llama al analizador semántico. Se requiere
también aceptor determinantico de estado en muchos casos ver mas allá del
finito. carácter que hemos leído para saber
si encontró un lexema o un error en la
entrada.
1.6. GRAMÁTICAS REGULARES Y
EXPRESIONES REGULARES En general existen tres técnicas para
codificar un analizador léxico:
Una forma más compacta de representar 1. Usar un programa generador tal
las gramáticas regulares es con el uso de como LEX que usa las
expresiones regulares. Las expresiones expresiones regulares de un
regulares hacen uso de tres operadores lenguaje como base.
(asuma que dos expresiones e1 y e2 2. Escribir un analizador léxico en
generan los lenguajes L1 y L2 algún lenguaje de alto nivel.
respectivamente): 3. Escribir un analizador léxico
usando ensamblador.
Concatenar. Definida como e1 e2={x y | x
Є L1 y e y Є L2} Una técnica muy utilizada es contar con
una memoria provisional dividida en dos
Alternar. Denotada como | ó +, es la unión partes de N caracteres donde N es
de lenguajes denotados por dos usualmente el número de bytes que
expresiones por lo que e1|e2 = {x | x Є L1 pueden leerse a la vez del dispositivo de
ó x Є L2} entrada, generalmente un bloque de disco
duro o flexible.
Cerrar. Representada por los corchetes
{}, denota la repetición de la expresión Si la memoria provisional no se llena por
cero o más veces, por lo que {e1} = {x | x completo, se usa un carácter especial que
i
Є L1*} donde L1*= Ui=0 Є L1 simbolice el fin del archivo.
Se usan dos apuntadores para llevar el
1.7. ERRORES LEXICOGRAFICOS control de cada lexema que se trata de
identificar. Si el apuntador derecho rebasa
Algunos tipos de errores pueden la mitad de la memoria provisional, un
reconocerse a nivel léxico, pero el nuevo bloque es leído de la memoria
analizador léxico tiene una vista muy secundaria al bloque izquierdo.
reducida y localizada del programa
fuente. Si el apuntador de la derecha rebasa el
límite de la memoria provisional de la
La recuperación de errores se da en derecha, un nuevo bloque se lee a ésta.
una de las formas de modo de pánico
donde se eliminan caracteres
Análisis Léxico
4. 4 Universidad Nacional Jorge Basadre G.
Este esquema funciona la mayoría de las
veces a menos que la distancia que deba
recorre el apuntador para reconocer una ficha
exceda a la longitud de la memoria
provisional.
1.9. RECONOCIMIENTO DE FICHAS
Existen casos en los que una ficha o un
identificador, al contar con las mismas reglas
para su construcción, pueden confundirse
hasta que no exista un símbolo que clarifique
su sintaxis, por ejemplo (clásico de
FORTRAN):
1.10. AUTOMATAS DE ESTADO FINITO
DO10I = 1,20
DO10I = 1+20 Par cada lenguaje definido por una
gramática regular o expresión regular,
existe una autómata de estado finito
En el primer caso es el uso de una palabra determístico para reconocer el mismo
reservada, en el segundo caso una variable. lenguaje. Un autómata de estado finito se
El problema se soluciona utilizando los dos define como un conjunto de 5 elementos
apuntadores a la memoria provisional de o componentes de la siguiente forma:
entrada.
M=(å,Q,D,q0,F)
Cuando un caso similar ocurre, el analizador
debe seguir buscando hacia adelante en el El alfabeto ∑ del autómata de estado
texto moviendo el apuntador de la derecha finito es el mismo que el de la gramática
mientras mantiene fijo el de la izquierda. regular, Q es el conjunto finito de estados
de los cuales q0 es uno específico
Si el camino que se tomo dentro del diagrama llamado estado inicial; F es el
de estado finito es el equivocado, el subconjunto de Q de estados finales o de
apuntador de la derecha se regresa a su parada. Un estado final es cualquier
posición original y se toma otra rama del estado en el que el autómata puede
diagrama, si el camino fue el adecuado, el detenerse.
apuntador de la izquierda se mueve hasta
donde se encuentra el de la derecha. Un conjunto de reglas de transición
llamadas ∆, definen cómo el autómata
Debido a esta función de los apuntadores de avanza de estado a estado en base a los
la memoria provisional se les llama símbolos de la “cinta de entrada”.
centinelas.
Las transiciones son una función parcial
Un caso claro del uso de centinelas es el del estado actual y del siguiente símbolo
caso de reconocer números de distintos tipos. de entrada:
En la figura anterior, modificamos el estado
22 de acuerdo a la siguiente figura: ∆: Qx∑→Q
Para un estado A con un símbolo de
entrada a a analizar, una transición que
avanza el autómata al siguiente estado B
se escribe como:
Un autómata de estado finito acepta la
cadena de entrada si el autómata se
encuentra en su estado final y no hay
más símbolos en la cinta. De otra forma,
el autómata se dice que rechaza o se
bloquea cuando no hay un estado
Análisis Léxico
5. 5 Universidad Nacional Jorge Basadre G.
definido de transición para el siguiente Debido a esto, se requiere de una
símbolo de la entrada o cuando no hay estrategia para tratar los errores respecto
más símbolos en la cinta y el autómata no a las reglas que define el lenguaje de
está en un estado final. programación. La respuesta a los errores
cae entre el colapso total del sistema
Cuando un autómata rechaza una hasta a la corrección automática completa
entrada, la cadena no forma parte del del programa fuente.
lenguaje.
Una clasificación posible de los errores es
Dos autómatas son equivalentes si la siguiente:
aceptan el mismo lenguaje. Son isomór-
ficos si son equivalentes en sus estados y I. Respuestas inaceptables
transiciones, pero los estados no tienen el 1. Respuesta incorrecta (el error
mismo nombre. Se les nombra reducidos no se reporta)
cuando no existe un autómata de estado a. El compilador sufre un
finito equivalente con menos estados. En colapso y falla
las siguientes figuras mostramos un b. El compilador cae en
autómata finito simple, uno isomórfico y un lazo infinito
uno equivalente, los dos en relación al c. El compilador continua
primero. 2. Respuesta correcta (pero casi
sin utilidad)
a. El compilador reporta el
primer error y se detiene
II. Respuesta aceptable
1. Respuestas posibles
a. El compilador reporta el
error y continua para
encontrar otros
posteriores si existen.
b. El compilador reporta el
error y lo repara si es
posible, continua y
entrega el código correcto.
2. Respuestas imposibles con la
tecnología actual
a. El compilador corrige el
error y entrega el código
que el programador
intentaba escribir.
1.12. DETECCIÓN DE ERRORES
1.12.1. La Naturaleza de los errores
Por definición, un compilador sólo
puede detectar errores
sintácticos. Los errores
semánticos se manifiestan sólo al
ejecutar el programa y no son
posibles de detectar antes con las
técnicas actuales. Para ello se
1.11. MANEJO DE ERRORES requiere un programa que
verifique que lo que el
Debido a la naturaleza del proceso de programador escribió sea lo que
programación, un traductor de programas se requiere para el problema en
se confronta con errores sintácticos con cuestión.
mucha frecuencia en los programas.
Análisis Léxico
6. 6 Universidad Nacional Jorge Basadre G.
Cualquier desviación de las reparar un programa inválido y
reglas de programación de un transformarlo en uno válido lo más
lenguaje dado es llamado error próximo al erróneo. El algoritmo toma un
sintáctico. Los errores sintácticos número de pasos proporcional a n3 donde
son detectadas en parte, en la n representa el número de símbolos del
mayoría de los compiladores programa fuente.
modernos, por un analizador libre
de contexto y el resto por algunos Se debe recalcar que un compilador
mecanismos a la medida con el usualmente no es capaz de determinar la
uso de tablas de compilación. causa de un error aunque este se detecte
de inmediato. El error puede deberse a un
1.12.2. ¿Cómo se detectan los error de mecanografía, un descuido del
errores? programador o una falta de entendimiento
Los errores son detectados de del lenguaje de programación. Mientras
dos formas: más pronto se detecte el error hay más
probabilidad de que el compilador pueda
Los errores en la sintaxis libre de tratar de adivinar la causa y tomar la
contexto del programa fuente son acción correctiva adecuada.
las más fáciles de encontrar
debido a las especificaciones 1.12.3. Reporte de errores
precisas de la sintaxis.
Cada error una vez detectado debe ser
Los errores pueden detectarse reportado de forma clara y precisa.
también por verificaciones de la
sintaxis sensitiva al contexto del Existen aún compiladores que confrontan
programa fuente. al usuario con mensajes tales como:
“error 221-34” o, pero aún “erro de tipo
Los errores en este tipo incluyen desconocido”.
los de definición de tipo en
variables y expresiones y son El usuario debe referirse, entonces, a un
difíciles de detectar en forma manual de explicaciones que provee el
efectiva debido a lo vago e autor del compilador donde quizá
impreciso de las descripciones encuentre una explicación.
propuestas para la sintaxis libre
de contexto. En los mensajes de error se debe incluir
cualquier información que el compilador
¿Dónde se detectan los errores? conozca y pueda utilizarse para que el
usuario discierna la causa del error; tal
Es posible que la detección del error no información puede incluir apuntadores,
ocurra hasta que el analizador haya nombres, atributos, etc. Toda esta
procedido una distancia arbitraria más información se debe expresar en términos
allá del punto donde el error tuvo lugar: de lenguaje fuente y debe orientarse
hacia el usuario.
a=b+c
THEN x=x-2 ; CONCLUSIONES
ELSE x=x+1 ;
Para empezar se debe entender el
En este ejemplo está claro para casi proceso de compilación, para que la
cualquier programador que el error es una maquina entienda el lenguaje a analizar,
ficha del tipo IF que falta. El punto donde esto inicia con el léxico.
se localiza THEN es el mínimo donde el Los autómatas son para poder entender
error se puede detectar en un analizador el proceso del compilador, cuando pasa
de izquierda a derecha. Cuando nuestros por diferentes estados para llegar a su
ojos alcanzan este punto somos capaces estado final.
rápidamente de saltar hacia atrás para .
descubrir el punto exacto del error. BIBLIOGRAFIA
Se puede codificar un analizador que
Análisis y diseño de compiladores – Emiliano
salte hacia atrás para encontrar el error,
Llano Díaz
pero el proceso en general lleva
demasiado tiempo para ser práctico.
Algunos autores ofrecen algoritmos para
Análisis Léxico