Tema: Autómatas de Estado Finitos

Documentos relacionados
Tema: Autómata de Pila

Tema: Análisis Semántico

Tema: Análisis Sintáctico

Tema: Análisis Léxico

Tema: Tipos Abstractos de Datos (TAD s) en C#.

Introducción a la Teoría de Autómatas, Lenguajes y Computación

PRACTICA 5: Autómatas Finitos Deterministas

Tema: Plantillas en C++.

DIAGRAMAS DE TRANSICIONES

Tema: Lenguaje ensamblador embebido

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo.

NOTAS PARA LA MATERIA LENGUAJES DE PROGRAMACIÓN

Autómatas de Estados Finitos

Tema: Introducción a Compiladores y al Lenguaje Micro C

TIPOS DE GRAMATICAS JERARQUIAS DE CHOMSKY

Tema: Grafos en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Programación IV. Guía 7

09 Análisis léxico V Compiladores - Profr. Edgardo Adrián Franco Martínez

300CIG007 Computabilidad y Lenguajes Formales: Autómatas Finitos

Tema: Sobrecarga de Operadores Unarios. Sobrecarga de Funciones.

Tema: Repaso sobre el uso del IDE de Microsoft Visual C#.

Nombre de la asignatura: Lenguajes y Autómatas I. Créditos: Aportación al perfil

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Tema: Tabla de Símbolos

8- LEX-Expresiones regulares

Computabilidad y Lenguajes Formales: Autómatas Finitos

SSL Guia de Ejercicios

Máquinas de estado finito y expresiones regulares

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 2.

Teoría de Autómatas y Compiladores [ICI-445] Capítulo 2: Autómatas Finitos

Clase 08: Autómatas finitos

Tema: Introducción al uso del simulador S7-PLCSIM

Unidad 4. Autómatas de Pila

Tema 1: Introducción. Teoría de autómatas y lenguajes formales I

Unidad 4. Autómatas de Pila

Autómatas Deterministas. Ivan Olmos Pineda

Tema: Programación Dinámica.

10 Análisis léxico VI Compiladores - Profr. Edgardo Adrián Franco Martínez

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa

Tema: DESARROLLO DE APLICACIONES CON VISUAL STUDIO-NET (PARTE I)

Curso Básico de Computación

Tema: Punteros a Objetos. Puntero this.

Tema: Arboles en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Definición de Árbol Binario. Programación IV. Guía No.

Analizador De léxico. V A R i : I N T E G E R ; \n...

El proceso del Análisis Léxico

Examen. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003.

Procesos de Fabricación I. Guía 1 1 SISTEMAS HIDRÁULICOS Y NEUMÁTICOS.

Tema: Genéricos en C#.

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

Tema: Análisis Sintáctico LR

Procesadores de Lenguaje

Departamento de Tecnologías de la Información. Tema 5. Decidibilidad. Ciencias de la Computación e Inteligencia Artificial

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

Capítulo 9. Introducción a los lenguajes formales. Continuar

Máquinas de Turing, recordatorio y problemas

CONJUNTOS REGULARES. Orlando Arboleda Molina. 19 de Octubre de Escuela de Ingeniería de Sistemas y Computación de La Universidad del Valle

Tema: Herramientas UML, Análisis y diseño UML

Elementos de un programa en C

1. Define que es un Autómatas finitos determinanticos y cuáles son sus elementos constitutivos (explique cada uno de ellos).

ANÁLISIS LÉXICO AUTÓMATAS FINITOS

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

Ciencias de la Computación I

Sintaxis de C Ing. Jose Maria Sola Dr. Oscar Ricardo Bruno

Autómatas de Pila y Lenguajes Incontextuales

Procesos de Fabricación I. Guía 1 1 MANUFACTURA INTEGRADA POR COMPUTADORA

Compiladores: Sesión 3. Análisis léxico, expresiones regulares

AUTOMATIZACIÓN INDUSTRIAL

Tema: Herramientas UML, Análisis y diseño UML

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

Introducción a Haskell. Cecilia Manzino

Tema 4. Autómatas Finitos

Procesos de Fabricación I. Guía 1 1 MANUFACTURA INTEGRADA POR COMPUTADORA

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS COORDINACION DE COMPUTACION

16 Análisis sintáctico I

Tema: Herramientas UML, Análisis y diseño UML

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.

LENGUAJES Y GRAMÁTICAS

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Tema: Generación de analizadores con YACC

1. Cadenas EJERCICIO 1

Conjuntos y expresiones regulares. Propiedades de las expresiones regulares (1) Propiedades de las expresiones regulares (2)

Tema: Algoritmos para la ruta más corta en un Grafo.

Laboratorio 2 Estructuras de Control Condicional: Si y Selección

Desarrollo de Programas. Prof. Lisbeth C. Pérez Rivas

Ciencias de la Computación I

Autómatas Finitos INAOE. Introducción a. Autómatas. Definición formal de un. Finito Determinístico. Finito No- Finitos y Lenguajes Formales

Programación en Lenguaje C

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

FACULTAD DE INGENIERIA

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Teoría de la Computación

Departamento de Tecnologías de la Información. Tema 4. Máquinas de Turing. Ciencias de la Computación e Inteligencia Artificial

Programación en java. Estructuras algorítmicas

Tema 5. Análisis semántico

Arboles Binarios de Búsqueda en C++

Unidad III Análisis Léxico. M.C. Juan Carlos Olivares Rojas

Tema: Clases y Objetos en C++.

Transcripción:

Compiladores. Guía 2 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Autómatas de Estado Finitos Contenido En esta guía se aborda la aplicación de los autómatas en el campo de los procesadores de lenguaje, haciendo énfasis en los Autómatas de Estado Finito. Objetivos Específicos Conocer las características básicas de un Autómata de Estado Finito. Crear algunas secuencias de cadenas evaluadas por un Autómata Finito en Jflap, e implementarlos en C++. Material y Equipo Guía No 2. Computadora con Dev-C++ y el simulador Jflap. Introducción Teórica Aplicación de los autómatas en los procesadores de lenguaje La tarea de comprobar si una sentencia pertenece o no a un determinado lenguaje se encomienda a los autómatas. En el campo de estudio de los traductores, compiladores, procesadores e intérpretes los autómatas se utilizan como reconocedores de lenguajes, que dada una cadena de símbolos indican si dicha cadena pertenece o no al lenguaje. Una cadena pertenece a un lenguaje si el autómata reconocedor de dicho lenguaje lo toma como entrada, y partiendo del estado inicial transita a través de varias configuraciones hasta que alcanza el estado final Autómatas finitos Un autómata finito es un conjunto de nodos y aristas que representan trayectorias para generar una expresión bajo un

2 Compiladores. Guía 2 alfabeto. Un diagrama de transición es un autómata finito. Existen dos tipos autómatas finitos, los cuales son: Autómatas finitos deterministas (AFD) Autómatas finitos no deterministas (AFND) Autómatas finitos deterministas (AFD) Definición. Una máquina de estados finitos M es un quíntuplo (K, Σ, δ, s, F), donde: K es conjuntos de estados. Σ es el alfabeto de entrada. δ : K X Σ K, es la función de transición, que a partir de un estado y un símbolo del alfabeto obtiene un nuevo estado. s K es el estado inicial. F K es un conjunto de estados finales. δ : K X Σ K, es la función de transición, que a partir de un estado y un símbolo del alfabeto obtiene un nuevo estado. Ejemplo: Figura 1. Autómata Finito Determinista Este autómata finito determinista puede ser expresado formalmente como: M = (K, Σ, δ, q0, F) K = {q0, q1, q2} Σ = {a, b} δ = {((q0, a), q1), ((q0, b), q2), ((q1, a), q1), ((q1, b), q1), ((q2, a), q0), ((q2, b), q2)} F = { q1, q2 } IMPORTANTE: Para que un AFD sea válido, el número de transiciones que salen de cada estado debe ser igual a la cantidad de caracteres del alfabeto, puesto que δ es una función que está definida para todas las entradas posibles.

Compiladores. Guía 2 3 Para el AFD anterior, el alfabeto es {a, b} de cada estado deben salir exactamente dos transiciones, una con a y otra con b. Otra condición es que debe tener exactamente un estado inicial. En cambio, la cantidad de estados finales puede ser cualquiera, inclusive cero, hasta un máximo de K (la cantidad de estados). Autómatas finitos no deterministas (AFND) Una extensión de los AFD S es la de permitir que de cada estado o nodo del diagrama de estados salga un número de flechas mayor o menor que Σ. Así se puede permitir que falte la flecha correspondiente a alguno de los símbolos del alfabeto, o bien que haya varias flechas que salgan de un solo nodo con la misma etiqueta. Inclusive se permite que las transiciones tengan como etiqueta palabras de varias letras o hasta la palabra vacía. Definición. Un autómata finito no determinista es un quíntuplo (K, Σ, Δ, s, F), donde K, Σ, s y F tienen el mismo significado para el caso de los AFD y Δ, llamada la relación de transición, es un subconjunto finito K X Σ* X K. Ejemplo. Verificar si la palabra baabbaba es aceptada por el autómata finito no determinista siguiente: Figura 2. Autómata Finito No Determinista Solución. La palabra baabbaba puede ser dividida en cuatro pedazos: p1 = b, p2 = a, p3 = abbab y p4 = a, cuya concatenación produce la palabra original. Ahora bien, podemos seguir la siguiente secuencia de estados (trayectoria) en el AFND dado: Estado Cadena que consume Produce estado 1 B 1 1 A 1 1 abab 2 2 A 2 Así probamos que la cadena baabbaba es aceptada por el AFND.

4 Compiladores. Guía 2 Procedimiento Los autómatas finitos se pueden utilizar para reconocer las expresiones regulares asociadas a los componentes léxicos en los lenguajes de programación. PARTE I. (Simulación de un autómata de estado finito en Jflap) Se desea construir una gramática que describe el lenguaje formado por los identificadores de un lenguaje de programación. Los identificadores de este lenguaje pueden estar formados por las tres primeras letras minúsculas (a,b,c) y el guion bajo(_). Sin embargo, un identificador no puede comenzar por un guion bajo(_). Crearemos un autómata para validar los identificadores de este lenguaje Ingrese al Jflap (su instructor le indicará la ubicación para acceder a este aplicativo). Una vez cargada la aplicación se le mostrará la siguiente ventana: Figura 3. Pantalla de inicio de Jflap

Compiladores. Guía 2 5 Presione el botón Finite Automaton y se deberá cargar la siguiente ventana: Figura 4. Ventana de edición de un AF en Jflap Cree el diagrama de la figura 5 en base a la siguiente ayuda: Primero seleccione de la barra de menú la operación a realizar, por ejemplo: Para crear estados El circulo. La flecha con punta rellena es para seleccionar, la otra flecha que apunta hacia la derecha es para indicar las transiciones, tiene que crear las que sean necesarias o indicadas en su autómata. Para crear una transición de un estado hacia el mismo, ubíquese en el estado y haga un doble clic. Y la calavera es para eliminar.

6 Compiladores. Guía 2 Figura 5. Creación del AF, parte 1/3 Luego de haber agregado los estados, es el momento de indicar cuál es el estado inicial y final, para ello debe estar en modo selección, luego clic derecho del mouse sobre el estado y observará el siguiente submenú: Figura 6. Creación del AF, parte 1/2 Defina el estado q 0 como estado inicial y q 1 como estado de aceptación. El diagrama debe verse más o menos de la siguiente forma:

Compiladores. Guía 2 7 Figura 7. Creación del AF, parte 3/3 Para probar el autómata, seleccione Step by State del menú Input para evaluar carácter por carácter de la cadena digitada. Figura 8. Evaluación de una cadena por el AF, parte 1/3 Digite la cadena:

8 Compiladores. Guía 2 Figura 9. Evaluación de una cadena por el AF, parte 2/3 Presione Aceptar para analizar la cadena de estado a estado (carácter por carácter). El resultado es la siguiente ventana, donde debe dar clic sobre el botón Step para ir observando paso a paso la ejecución del autómata. Figura 9. Evaluación de una cadena por el AF, parte 3/3 Evalué las siguientes cadenas en el autómata creado y marque con una X las que son aceptadas por este: abc abc aba_a _abc abcd PARTE II. (Simulación de un autómata de estado finito en C++) Crearemos un pequeño programa en C++ que simule en autómata de pila creado en la parte I.

Compiladores. Guía 2 9 Una forma sencilla de implementar autómatas de estado finito es mediante bucles anidados. Usamos una variable para almacenar el estado actual y una estructura de selección múltiple doblemente anidada. La primera estructura de selección comprueba el estado actual y el siguiente el carácter en la entrada. Las transiciones se corresponden con asociar un nuevo estado a la variable y avanzar en la entrada. Digite y compile el siguiente código fuente en C++ #include <iostream> #include <string> using namespace std; bool simular_af(char *c) { int pos = 0; //posicion del caracter a evaluar en la cadena int state = 0; //estado del automata int longitud = strlen(c); while( (state == 0 state == 1) && pos < longitud) { switch(state) { case 0://estado 0 switch(c[pos]) { case 'a': case 'b': case 'c': default: return false; }; case 1://estado 1 switch(c[pos]) { case 'a': case 'b': case 'c': case '_':

} 10 Compiladores. Guía 2 }; pos++; default: return false; }; default: return false; //error, el estado solo puede ser 0 1 }; if(state == 1)//estado de aceptacion return true; else return false; int main(){ char cadena[80]; cout<<"ingrese la cadena a analizar: "; cin.getline(cadena,80); if(!simular_af(cadena)) cout<<"error: Identificador no valido"<<endl; else cout<<"la cadena '"<<cadena<<"' es un identificador valido"<<endl; system("pause"); return 0; } El código que se genera es largo y difícil de mantener en el caso de que se introduzcan nuevos caracteres en el alfabeto de entrada o nuevos estados. Evalué las siguientes cadenas en el autómata creado y marque con una X las que son aceptadas por este: abc abc aba_a _abc abcd

Compiladores. Guía 2 11 Análisis de resultados Ejercicio 1 Se desea construir una gramática que describe el lenguaje formado por los identificadores de MICRO C. (Puede consultar la guía anterior) Cree el autómata para validar los identificadores de este lenguaje. Se pide a) Simulación del autómata de estado correspondiente en JFlap b) Simular el autómata en un pequeño programa en C/C++. Investigación complementaria Parte A - Ejercicio 2 Crear un autómata finito para validar el tipo de dato float de un lenguaje de programación, considerando los siguientes aspectos: El alfabeto de entrada de este autómata deberá estar formado por los números dígitos (0-9), el signo menos (-) y el punto (.) Las cantidades pueden ser positivas o negativas. Las cantidades pueden ser o no ser enteras. Se pide: a) Simulación del autómata de estado correspondiente en Jflap b) Simular el autómata en un pequeño programa en C/C++. Parte B Investigar con el tutorial de Jflap como implementar Autómatas de Pila. Investigar que es un analizador sintáctico.

12 Compiladores. Guía 2 Guía 2: Autómatas de Estado Finitos Hoja de cotejo: 2 Alumno: Máquina No: Docente: GL: Fecha: EVALUACION % 1-4 5-7 8-10 Nota CONOCIMIENTO Del 20 al 30% Conocimiento deficiente de los fundamentos teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% No tiene actitud proactiva. Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas. TOTAL 100%