La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

ANALISIS LEXICOGRAFICO

Presentaciones similares


Presentación del tema: "ANALISIS LEXICOGRAFICO"— Transcripción de la presentación:

1 ANALISIS LEXICOGRAFICO

2 INTRODUCCION La fase del análisis lexicográfico de un compilador agrupa Secuencia de caracteres en categorías: rastreo y filtrado. Rastreador mueve un apuntador a través de la entrada un carácter a la vez para hallar cadenas continuas de caracteres, las cuales constituyen elementos textuales individuales y clasifica cada una de acuerdo con su tipo. Filtro descarta algunos de los tokens encontrados por el rastreador determina cuales otros símbolos reservados y coloca el texto de los restantes en las tablas de nombres

3 2.1. EL PROBLEMA DEL ANALISIS LEXICOGRÁFICO
Dada una cadena de caracteres divídase en una cadena de tokens: token= (tipo, valor) Al tipo de un token a menudo se le llama clase; los caracteres reales se conocen como lexemas. Existen tres formalismos o modelos comunes. Expresiones regulares. Describen los tokens como el conjunto de cadenas permitidas en un lenguaje. Diagramas de transición. Describen los tokens como las cadenas permitidas que toman el diagrama desde un estado inicial hasta un estado final. Gramáticas lineales. Describen los tokens como las cadenas generadas por una gramática en forma especial.

4 2. EJEMPLOS DE TOKENS MaxNum es identificado como un token cuyo tipo es identificador y cuyo valor es un apuntador a una tabla donde MaxNum se lista como uno de los nombres definidos por el usuario en el programa.

5 2.3. RECONOCIMIENTO DE TOKENS
El reconocimiento de tokens es difícil en algunos lenguajes. Por ejemplo FORTRAN. DO 15 I =1,25 DO 15 I=1.25 La primera sentencia es una construcción iterativa llamada ciclo iterativo DO. La segunda es una sentencia de asignación. (El valor 1.25 se asigna a a variable DO151 en FORTRAN, los espacios no son significativos). Una razón para esto es que algunas palabras como IF y DECLARE (empleadas en lenguajes de alto nivel) están restringidas, es decir no pueden emplearse como identificadores

6 EJEMPLO 1 Otra vez de FORTRAN
Lo siguiente es el principio se sentencias permitidas en FORTRAN: IF (1.E+6. LT. N) … IF (1 EQ. N)… (Para los lectores que no conocen FORTRAN, el primer fragmento se lee “si 1X es menor que N”….) El problema es el ejemplo 1 es que, habiendo rastreado los primeros 6 caracteres, no sabemos si. IF (1.E. . . Es el principio de IF (1.E+6 .LT. N) . . . O IF (1 .EQ. N)

7 2.4. FUNCIONES PRINCIPLAES DE LOS ANALIZADORES LEXICOGRAFICOS
Existen cuatro funciones principales para un analizador lexicográfico a medida que va hallando tokens: (1) utilidades de caracteres y manejo de líneas, (2) prueba de predicado, (3) acciones y (4) manejo de errores.

8 2.4.1 Utilidades de caracteres y manejo de línea.
DameCar: Mueve el apuntador de búsqueda hacia adelante y regresa el carácter siguiente. Falla: Mueve el apuntador de búsqueda hacia delante de regreso al apuntador actual. Retraer: Mueve el apuntador de búsqueda hacia delante un carácter de regreso. Aceptar: Mueve el apuntador actual hacia delante del apuntador de búsqueda hacia adelante.

9 2.4.2 Prueba de Predicado La prueba de predicado verifica la membresía de un conjunto de caracteres. Las utilerías típicas son: EsLetra EsDigito EsDelimitador EsC Donde EsLetra(x) es un predicado que regresa al valor verdadero si X es una letra, EsDigito(x) es un predicado que regresa al valor verdadero si x es un digito.

10 2.4.3 Acciones Hay una acción en cada tipo de token.
InstalaNombre: Pone el token nombre en una tabla de nombres. IsntalaLiteral: Pone el token literal en una tabla de literales. Podemos necesitar una acción para cada carácter rastreado. Por ejemplo cuando se rastrean los dígitos en un número, podríamos tener que convertir la secuencia de caracteres a un número.

11 2.4.4 Errores Cualquier cosa que el analizador lexicográfico no pueda reconocer y clasificar se toma como un error. Algunos errores, como l omisión de signos de punto y coma de lenguajes que requieren de ellos, u olvidar cerrar un paréntesis abierto con anterioridad, no pueden ser identificados por el analizador lexicográfico, únicamente lee secuencias de caracteres y decide si la palabra (token) está incluida en el lenguaje o no.

12 2.5 DIAGRAMAS DE TRANSICIÓN
Los diagramas de transición describen las acciones necesarias para reconocer un token. Formalmente un diagrama de transición es una gráfica dirigida con arcos etiquetados. Los nodos se denominan estados y los arcos se etiquetan con caracteres de entrada. A menudo se emplean un doble circulo para representar un estado final o de aceptación.

13 EJEMPLO: un identificador se describe como una letra seguida por un número arbitrario de letras o dígitos.

14 Este diagrama puede describirse en seudocódigo como sigue:
{estado 1}: C:= DameCar SI Esletra (C) ENTONCES {estado 2}: Mientras Esletra (C) o EsDigito (C) hacer C:= DameCar TERMINAMIENTRAS {estado 3}: Retraer- hemos rastreado un carácter de mas T:= (Id, Instala) Aceptar Regresa (t) {estado 4}: OTRO Falla- comienza la búsqueda por un token diferente TERMINASI

15 2.6 AUTÓMATAS FINITOS Autómatas finitos, conocidos también como máquinas de estado finito o maquinas secuenciales.  Los autómatas finitos vienen en diferentes tipos: No determinísticos (NFA, por sus siglas en Ingles) Determinísticos (DFA, por la misma razón) Determinísticos mínimos. Distinguiremos entre estos mostrando algunos ejemplos de cada uno.

16 EJEMPLO: Autómata finito no determinístico
La primera pregunta que podemos hacernos es “¿Qué es lo que acepta este diagrama de transición?”, es decir, ¿Cuáles caracteres de entrada podría aceptar desde el inicio o estado 0 hasta el estado final 2? La respuestas es que autómata finito describe identificadores especiales utilizados por la autora en un segmento de un sistema de software al que describió alguna vez.

17 EJEMPLO 5: Otro autómata finito no determinístico
Aquí, LD se establece por “letra o digito” Nuestra primera pregunta para el autómata en el ejemplo 5 debe ser “¿Qué significa ?” Utilizamos para indicar que puede hacerse un movimiento sin procesar ninguna entrada, y este movimiento se conoce como transición épsilon. De nueva cuenta, esto puede ocasionar una situación no determinística como en el estado 7, donde debe ser hecha una decisión basada solo en esta información si se observa una entrada y quizá ir al estado 8, o no observar ninguna entrada e ir al estado2.

18 La segunda pregunta debe ser de nuevo “¿qué es lo que acepta
La segunda pregunta debe ser de nuevo “¿qué es lo que acepta?” Mediante un examen cuidadoso, notamos que la secuencia de caracteres debe comenzar y finalizar con “$”. En medio puede haber cualquier número de letras, dígitos o signos de “$”, de modo que esto acepta la misma secuencia de caracteres que el ejemplo precedente. La tercera pregunta “¿puede ser escrito un programa de computadora en este caso?” debe responderse “no” ya que (como se ha mostrado) ninguna computadora puede decidir basándose en ninguna otra información, si ve o no a los caracteres de entrada.

19 EJEMPLO 6: Autómata finito determinístico
Esto acepta la misma secuencia de caracteres que los dos ejemplos precedentes, es decir, secuencias de letras, dígitos y signos de “$”, las cuales empiezan y terminan en “$”. Debido a que puede determinarse definitivamente que hacer para cada entrada de carácter, este es un autómata finito determinístico. Un purista requeriría un autómata determinístico para tener una transición desde cada estado en cada entrada posible. En este caso, tendríamos una transición desde cada estado 0, cuando la entrada fuera una letra o digito hacia un estado de error. Un programa de computación puede ser escrito con facilidad para simular este autómata finito.

20 FUNDAMENTOS DE TEORIA DE
LENGUAJES Los autómatas finitos descritos en la sección 2.6 son un formalismo para describir conjuntos de cadenas de caracteres. Son utilizados en compiladores para reconocer los tokens en un lenguaje de programación. Existen otros tipos formalismos para describir estos mismos conjuntos. Uno de estos son las expresiones regulares.

21 DEFINICIONES BASICAS DEFINICION 1: ALFABETO: un conjunto finito de símbolos utilizados en un lenguaje. Por ejemplo: A= {$, A…Z, 0…9} Denota un alfabeto llamado A qué consiste de los símbolos $ y el conjunto de letras (mayúsculas) y dígitos. (Hemos completado la abreviación A…Z Y 0…9, en lugar de listar tolas las letras y dígitos) DEFINICION2: CADENA=SENTENCIA=PALABRA: una sentencia finita de símbolos de un alfabeto. X= $AB1$ Denota una cadena de caracteres llamada x que comienza y finaliza con “$”ny contiene los caracteres “AB1” entre los signos “$” DEFINICION 3: |X|: longitud de la cadena x |$AB1$|=5 DEFINICION 4: : cadena (de caracteres) vacía. | | = 0

22 DEFINICION 5: xy: concatenación de cadenas de las cadenas x y y.
Por ejemplo: Si x=$AB1$ y y=$$ , entonces xy=$AB1$$$ También x€= €x = x DEFINICION 6: LENGUAJE: un conjunto de cadenas L1 = {$$, $AB1$} Denota el lenguaje L1 que consiste de las dos cadenas $$, $AB1$ DEFINICION 7: LM: Concatenación de los lenguajes L y M = {xy|x(€L, y €M)} Si L={$} y M={x|x es una secuencia de letras o dígitos} Entonces LM ={$x | x es una secuencia de letras o dígitos}, es decir LM se compone de cadenas de letras y dígitos que comienzan con un signo de $. DEFINICION 8: Li : L concatenada i veces Por ejemplo Si L={x|x es una secuencia de letras y dígitos}, entonces L3 ={xyz|x,y,z son secuencias de letras o dígitos}. L3 se compone de secuencias de letras y dígitos de al menos longitud tres. L0 se define como el lenguaje que consiste de € , es decir, L0 = {€}

23 DEFINICION 10: CERRADURA DE KLEENE DE L, L* = L0 U L1 U L2 U ….
DEFINICION 9: L U M: {x|x € L o x € M} Por ejemplo Si L = {$} y M = {$AB1$}, entonces L U M = {$,$AB1$} La unión del lenguaje vacío con un lenguaje L es L: { } U L = L U { } = L La unión de {€} con L puede no ser igual a L, a menos que L contenga a € {€} U L = L U {€} ≠ L (a menos que € este en L) DEFINICION 10: CERRADURA DE KLEENE DE L, L* = L0 U L1 U L2 U …. Por ejemplo, si L = {x|x es una letra o digito}, entonces L+ = {sentencias de letras o dígitos} U {€} DEFINICION 11: L+ =LL* = L1 U L2 U L3 U … Por ejemplo, si L = {x|x es una letra o digito}, entonces L+= {secuencias de letras o dígitos}

24 EXPRESIONES REGULARES
Una expresión regular es una formula para denotar “ciertos” lenguajes. Adviértase que decimos lenguaje, no cadena de caracteres. Una expresión regular única denota un conjunto de cadenas, es decir, un lenguaje, no una simple cadena. No todos los lenguajes pueden ser expresados utilizando una expresión regular. La siguiente tabla define en forma recursiva cuales lenguajes pueden describirse mediante expresiones regulares.

25 CONVERSION DE EXPRESIONES REGULARES
EN AUTOMATAS FINITOS NO DETERMINISTICOS Las expresiones regulares y autómatas finitos son notaciones alternativas para el mismo tipo de lenguaje: tienen el mismo poder expresivo. Las imágenes siguientes muestran como puede ser representada una expresión regular por medio de un autómata finito no determinístico. Este primer diagrama muestra que la expresión regular € la cual denota el lenguaje que consiste de la cadena vacía {€}, puede ser reconocido por el autómata finito no determinístico que va desde su estado inicial hasta su estado final sin lectura de entrada, es decir, mediante una transición - €.

26 Este diagrama muestra que el lenguaje {a} denotado por la expresión regular a es reconocido por el autómata finito que va desde su estado inicial hasta su estado final por medio de la lectura de una a. Aquí, presumimos que los lenguajes denotados por las expresiones regulares R1 Y R2 son LR1 y LR2 respectivamente, los cuales son reconocidos por los autómatas finitos denotados por M1 y M2. Al agregar transiciones € al principio y al final se crea un autómata finito que reconocerá ya sea el lenguaje representado por R1 o el lenguaje representado por R2, es decir, la unión de estos dos lenguajes LR1 U LR2.

27 En el diagrama 4, M1 es la maquina que acepta LR1 y M2 es el lenguaje que acepta LR2. De este modo, después de que este autómata combinado ha reconocido una cadena permitida en LR1, comenzara a buscar cadenas permitidas en LR2. Esto es exactamente el conjunto de cadenas denotadas por R1.R2 Aquí, M es un autómata finito que reconoce a LR. Al agregar un nuevo estado inicial que es también un estado final, reconoce la cadena vacía €. La transición -€ de todos los estados finales de M a su estado inicial permitirán el reconocimiento de LiR, i=2,….

28


Descargar ppt "ANALISIS LEXICOGRAFICO"

Presentaciones similares


Anuncios Google