Analizador lexico

5,736 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,736
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
159
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Analizador lexico

  1. 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 RESUMENEl presente artículo presentaremos la información La segunda que determina ladetallada acerca de cómo funciona el análisis organización sintáctica del programa.léxico en el entorno de compiladores, mediante eluso de gramáticas para poder comprender la A lo largo de este artículo, plantearemos losseparación del lenguaje léxico del semántico, objetivos que debe cumplir un Analizador Léxico.entender los diagramas de transición para lo cualse 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 manejarlosAnalizador, 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 examenAnalizar un programa fuente es algo complejo por carácter a carácter, separa el programaende será recomendable dividir la fase de análisis fuente en piezas llamadas fichas queen 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. 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. 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. 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. 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. 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

×