ANALISIS LEXICOGRAFICO

Slides:



Advertisements
Presentaciones similares
Programación de sistemas
Advertisements

TEORIA DE CONJUNTOS.
Teoría de la computación DECIBILIDAD Equipo 4 Karla Flores Samuel rojas Filiberto Jiménez.
PROGRAMACIÓN I CENTRO DE ESTUDIOS INTEGRADOS EL MARISCAL - CEIM Ing. Luisa Fernanda Arenas Castañeda Feb 6 de 2016.
RECONOCES Y REALIZAS OPERACIONES CON DISTINTO TIPO DE FUNCIONES PROFESORA: XÓCHITL ARIANDA RUIZ ARMENTA MATEMÁTICAS 4 4TO SEMESTRE ENERO 2015 MULTIVERSIDAD.
Autómatas finitos (AF) Los AF constan de 5 elementos fundamentales AF=( , E, F, s,  ).  Un alfabeto (  )  Un conjunto de estados (E)  Un conjunto.
Prof. Mauro Zaravia Ortiz Computación e Informática.
Un grafo consta de un conjunto de vértices y un conjunto de aristas. Cada arista de un grafo se especifica mediante un par de vértices. Denotemos al conjunto.
A NÁLISIS L ÉXICO Y ANÁLISIS SINTÁCTICO. COMPILADORES ANÁLISIS LÉXICO Y ANÁLISIS SINTÁCTICO ANGIE EVILLA LUQUEZ CORPORACIÓN UNIVERSITARIA REMINGTON INGENIERÍA.
ESTADÍSTICAS DESCRIPTIVAS REPRESENTACIONES GRÁFICAS Psic. Gerardo A. Valderrama M:
VECTORES UNIDAD IV: VECTORES N.SN J. Pomales CeL CONCEPTOS BÁSICOS.
Traducción dirigida por la Sintaxis Teoría de Autómatas y Lenguajes Formales Alma María Pisabarro, 2007.
FUNDAMENTOS DE PROGRAMACIÓN COMPUTACIONAL. Contenidos de la clase -Presentación del Docente -Presentación del Plan de Trabajo - Fechas de Evaluaciones.
Universidad Cesar Vallejo ALFA-UCV Teoría de Conjuntos.
1 Autómatas de pila (Pushdown automata). 2 Autómata de conteo Autómata finito determinista con un contador de enteros o “bolsa” en la que se colocan o.
Las reglas del juego UNO
Ingreso , proceso y salida de datos
TERMINOLOGÍA BÁSICA Informática: conjunto de conocimientos científicos y técnicas que hacen posible el tratamiento automático y racional de la información,
NOCIÓN DEL CONCEPTO DE FUNCIÓN
UNIVERSIDAD NACIONAL DE CHIMBORAZO
Estructuras de Control.
Actividad #2 Los algoritmos
LENGUAJES FORMALES, AUTOMATAS Y MAQUINAS DE ESTADOS FINITOS
ROBERTO PINEDA FLORES. ALEXIS JULIAN VELAZQUEZ NAVA.
Conceptos básicos de programación
Fundamentos de programación
Métodos en Java.
Estructuras de Datos Recursividad.
Computación Valeria Herskovic –
Básicos de Autómatas.
En la siguiente presentación veremos algunos términos que debemos conocer para iniciar la educación virtual.
CAPÍTULO 2: PRINCIPIOS BÁSICOS DE MATLAB
Tema 4 Elementos para el Desarrollo de Algoritmos
AUTOMATAS Y LENGUAJES FORMALES FASE 1
Descripción del lenguaje
Tema 2 Variables y cálculos
Tema 6. Conceptos básicos de programación Clase 1
Unidad 2: Programación 2. Programación Curso
Infografía. Estructura de Datos.
LÓGICA DE PROGRAMACIÓN
ALGORITMOS es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos.
INDICE Ejemplo 1: Temperaturas registradas entre las 5hs y 22:30hs
Tema 4 Elementos para el Desarrollo de Algoritmos
¿Qué es un sistema operativo?
Funciones Prof. M. Alonso
Fundamentos de Programación
Diseño en Alice En este módulo estudiaremos los elementos del diseño en Alice: Escenarios Storyboards Textuales Visuales Definiciones.
Estructuras de control en PHP
AUTOMATAS FINITOS DETERMINISTICOS
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA
PROGRAMACIÓN 1 INTRODUCCIÓN
Curso de Programación Web html, java script
CONCEPTOS BÁSICOS DE COMPUTACIÓN E HISTORIA
LENGUAJE C.
Taller de Matemáticas Financieras
Matlab como calculadora
Metodología de la Programación
Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2018
Introducción a los algoritmos
Programación I MC José Andrés Vázquez Flores
TEORÍA DE CONJUNTOS.
Sistema de Búsqueda de Respuestas
Matrices Conceptos básicos. Matrices Buscando formas para describir situaciones en matemáticas y economía, llegamos al estudio de arreglos rectangulares.
Introducción a la Estadística Informática
Escuela Nacional de Antropología e Historia (ENAH)
Escuela Nacional de Antropología e Historia (ENAH)
2.  Diagramas de Estado.
UNIVERSIDAD JUÁREZ AUTÓNOMA DE TABASCO Nombres: Isaac Sánchez García Teofilo Martinez Garcia Ricardo Del Carmen Paz López Vanesa Anahí Pérez Lizárraga.
COMPILADORES Semana 1 Ing. Jorge Vigil Farfán MgTI, PMP, ITIL-Expert, Cloud, ISO 27002, CCNP, CCNA, CCNA Sec, NSE.
ANÁLISIS DE GRÁFICAS ESTADÍSTICAS
Transcripción de la presentación:

ANALISIS LEXICOGRAFICO

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

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.

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.

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

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 10 6 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) . . .

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.

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.

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.

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.

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.

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.

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

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

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.

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.

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.

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.

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.

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.

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

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 = {€}

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}

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.

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 - €.

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.

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,….