Anda di halaman 1dari 12

Compiladores.

Gua 2 Facultad: Ingeniera Escuela: Computacin Asignatura: Compiladores

Tema: Autmatas de Estado Finitos


Contenido
En esta gua se aborda la aplicacin de los autmatas en el campo de los procesadores de lenguaje, haciendo nfasis en los Autmatas de Estado Finito.

Objetivos Especficos
Conocer las caractersticas bsicas de un Autmata Estado Finito. Crear algunas secuencias de cadenas evaluadas por Autmata Finito en Jflap, e implementarlos en C++. de un

Material y Equipo
Gua No 2. Computadora con Dev-C++ y

el simulador Jflap.

Introduccin Terica
Aplicacin de los autmatas en los procesadores de lenguaje

Gua 3

La tarea de comprobar si una sentencia pertenece o no a un determinado lenguaje se encomienda a los autmatas. En el Gua 4 campo de estudio de los traductores, compiladores, procesadores e intrpretes los autmatas se utilizan como fa reconocedores de lenguajes, que dada una cadena de smbolos indican si dicha cadena pertenece o no al lenguaje. Una cadena pertenece a un lenguaje si el autmata reconocedor de dicho lenguaje lo toma como entrada, y partiendo del estado inicial transita a travs de varias configuraciones hasta que alcanza el estado final Autmatas finitos Un autmata finito es un conjunto de nodos y aristas que representan trayectorias para generar una expresin bajo un

Compiladores. Gua 2

alfabeto. Un diagrama de transicin es un autmata finito. Existen dos tipos autmatas finitos, los cuales son: Autmatas finitos deterministas (AFD) Autmatas finitos no deterministas (AFND) Autmatas finitos deterministas (AFD) Definicin. Una mquina de estados finitos M es un quntuplo (K, , , s, F), donde: K es conjuntos de estados. es el alfabeto de entrada. : K X K, es la funcin de transicin, que de un estado y un smbolo del alfabeto obtiene estado. s K es el estado inicial. F K es un conjunto de estados finales. : K X K, es la funcin de transicin, que de un estado y un smbolo del alfabeto obtiene estado. Ejemplo:

a partir un nuevo

a partir un nuevo

Figura 1. Autmata Finito Determinista Este autmata 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 vlido, el nmero de transiciones que salen de cada estado debe ser igual a la cantidad de caracteres del alfabeto, puesto que es una funcin que est definida para todas las entradas posibles.

Compiladores. Gua 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 condicin es que debe tener exactamente un estado inicial. En cambio, la cantidad de estados finales puede ser cualquiera, inclusive cero, hasta un mximo de |K| (la cantidad de estados). Autmatas finitos no deterministas (AFND) Una extensin de los AFDS es la de permitir que de cada estado o nodo del diagrama de estados salga un nmero de flechas mayor o menor que ||. As se puede permitir que falte la flecha correspondiente a alguno de los smbolos 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 vaca. Definicin. Un autmata finito no determinista es un quntuplo (K, , , s, F), donde K, , s y F tienen el mismo significado para el caso de los AFD y , llamada la relacin de transicin, es un subconjunto finito K X * X K. Ejemplo. Verificar si la palabra baabbaba es aceptada por el autmata finito no determinista siguiente:

Figura 2. Autmata Finito No Determinista Solucin. La palabra baabbaba puede ser dividida en cuatro pedazos: p1 = b, p2 = a, p3 = abbab y p4 = a, cuya concatenacin produce la palabra original. Ahora bien, podemos seguir la siguiente secuencia de estados (trayectoria) en el AFND dado: Estado 1 1 1 2 Cadena que consume B A abab A Produce estado 1 1 2 2

As probamos que la cadena baabbaba es aceptada por el AFND.

Compiladores. Gua 2

Procedimiento
Los autmatas finitos se pueden utilizar para reconocer las Gua 3 expresiones regulares asociadas a los componentes lxicos en los lenguajes de programacin. PARTE I. Jflap)
fa

Gua 4

(Simulacin

de

un

autmata

de

estado

finito

en

Se desea construir una gramtica que describe el lenguaje formado por los identificadores de un lenguaje de programacin. Los identificadores de este lenguaje pueden estar formados por las tres primeras letras minsculas (a,b,c) y el guion bajo(_). Sin embargo, un identificador no puede comenzar por un guion bajo(_). Crearemos un autmata para validar los identificadores de este lenguaje Ingrese al Jflap (su instructor le indicar la ubicacin para acceder a este aplicativo). Una vez cargada la aplicacin se le mostrar la siguiente ventana:

Figura 3. Pantalla de inicio de Jflap

Compiladores. Gua 2 5

Presione el botn Finite Automaton y se deber cargar la siguiente ventana:

Figura 4. Ventana de edicin de un AF en Jflap Cree el diagrama de la figura 5 en base a la siguiente ayuda: Primero seleccione de realizar, por ejemplo: la barra . , la otra de men la operacin a

Para crear estados El circulo

La flecha con punta rellena es para seleccionar flecha que apunta hacia la derecha transiciones, tiene que crear las indicadas en su autmata.

es para indicar las que sean necesarias o hacia el mismo,

Para crear una transicin de un estado ubquese en el estado y haga un doble clic. Y la calavera es para eliminar .

Compiladores. Gua 2

Figura 5. Creacin del AF, parte 1/3 Luego de haber agregado los estados, es el momento de indicar cul es el estado inicial y final, para ello debe estar en modo seleccin, luego clic derecho del mouse sobre el estado y observar el siguiente submen:

Figura 6. Creacin del AF, parte 1/2 Defina el estado q0 como estado inicial y q1 como estado de aceptacin. El diagrama debe verse ms o menos de la siguiente forma:

Compiladores. Gua 2 7

Figura 7. Creacin del AF, parte 3/3 Para probar el autmata, seleccione Step by State del men Input para evaluar carcter por carcter de la cadena digitada.

Figura 8. Evaluacin de una cadena por el AF, parte 1/3 Digite la cadena:

Compiladores. Gua 2

Figura 9. Evaluacin de una cadena por el AF, parte 2/3 Presione Aceptar para analizar la cadena de estado a estado (carcter por carcter). El resultado es la siguiente ventana, donde debe dar clic sobre el botn Step para ir observando paso a paso la ejecucin del autmata.

Figura 9. Evaluacin de una cadena por el AF, parte 3/3 Evalu las siguientes cadenas en el autmata creado y marque con una X las que son aceptadas por este: abc abC aba_a _abc abcd PARTE II. (Simulacin de un autmata de estado finito en C++) Crearemos un pequeo programa en C++ que simule en autmata de pila creado en la parte I.

Compiladores. Gua 2 9

Una forma sencilla de implementar autmatas de estado finito es mediante bucles anidados. Usamos una variable para almacenar el estado actual y una estructura de seleccin mltiple doblemente anidada. La primera estructura de seleccin comprueba el estado actual y el siguiente el carcter 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 cdigo 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': state = 1; break; case 'b': state = 1; break; case 'c': state = 1; break; default: return false; }; break; case 1://estado 1 switch(c[pos]) { case 'a': state = 1; break; case 'b': state = 1; break; case 'c': state = 1; break; case '_':

10 Compiladores. Gua 2
state = 1; break; default: return false; }; break; default: return false; //error, el estado solo puede ser 0||1 }; pos++; }; 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 cdigo que se genera es largo y difcil 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 autmata creado y marque con una X las que son aceptadas por este: abc abC aba_a _abc abcd

Compiladores. Gua 2 11

Anlisis de resultados
Ejercicio 1 Se desea construir una gramtica que describe el lenguaje formado por los identificadores de MICRO C. (Puede consultar la gua anterior) Cree el autmata para validar los identificadores de este lenguaje. Se pide a) Simulacin del autmata de estado correspondiente en JFlap b) Simular el autmata en un pequeo programa en C/C++.

Investigacin complementaria
Parte A - Ejercicio 2 Crear un autmata finito para validar el tipo de dato float de un lenguaje de programacin, considerando los siguientes aspectos: El alfabeto de entrada de este autmata deber estar formado por los nmeros dgitos (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) Simulacin del autmata de estado correspondiente en Jflap b) Simular el autmata en un pequeo programa en C/C++. Parte B Investigar con el tutorial de Jflap como Autmatas de Pila. Investigar que es un analizador sintctico.

implementar

12 Compiladores. Gua 2

Gua 2: Finitos

Autmatas

de

Estado

Hoja de cotejo:

Docente: Mquina No: Mquina No:


GL:
GL: Mquina No: GL: a

2 1

Tema: : AlumnoPresentacin del programa Alumno:

Docente:
Docente:

Fecha:

EVALUACION % CONOCIMIENTO Del 20 al 30% 1-4 Conocimiento deficiente de los fundamentos tericos 5-7 Conocimiento y explicacin incompleta de los fundamentos tericos 8-10 Conocimiento completo y explicacin clara de los fundamentos tericos Nota

APLICACIN 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 gua. Tiene actitud proactiva y sus propuestas son concretas.

TOTAL

100%

Anda mungkin juga menyukai