CARRERA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
TEORIA DE COMPILADORES 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 de Estado Finito. Crear algunas secuencias de cadenas evaluadas por un Autmata Finito en Jflap, e implementarlos en C++. MATERIAL Y EQUIPO Computadora con Dev-C++ y el simulador Jflap. Dispositivo de Almacenamiento (USB). INTRODUCCIN TERICA Aplicacin de los autmatas en los procesadores de lenguaje La tarea de comprobar si una sentencia pertenece o no a un determinado lenguaje se encomienda a los autmatas. En el campo de estudio de los traductores, compiladores, procesadores e intrpretes los autmatas se utilizan como 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 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) UNIVERSIDAD TECNOLOGICA DE LOS ANDES CARRERA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
Autmatas finitos deterministas (AFD) Definicin. Una mquina de estados finitos M es un quntuplo (K, Z, 5, s, F), donde: K es conjuntos de estados. es el alfabeto de entrada. : K X K, es la funcin de transicin, que a partir de un estado y un smbolo 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 funcin de transicin, que a partir de un estado y un smbolo del alfabeto obtiene un nuevo estado. Ejemplo:
Figura 1. Autmata Finito Determinista Este autmata finito determinista puede ser expresado formalmente como: M = (K, Z, 5, 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}
Diagrama de transiciones determinista. Estar caracterizado porque debe estar totalmente definido: para cada estado solo debe salir un arco y solo uno para cada smbolo (el autmata no puede determinar la transicin en el caso de que haya dos arcos con el mismo smbolo o no haya ninguno). Smbolos UNIVERSIDAD TECNOLOGICA DE LOS ANDES CARRERA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
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. 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. UNIVERSIDAD TECNOLOGICA DE LOS ANDES CARRERA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
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 Cadena que consume Produce estado 1 B 1 1 A 1 1 abbab 2 2 A 2 As probamos que la cadena baabbaba es aceptada por el AFND.
Procedimiento Los autmatas finitos se pueden utilizar para reconocer las expresiones regulares asociadas a los componentes lxicos en los lenguajes de programacin. PARTE I. (Simulacin de un autmata de estado finito en Jflap) 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: UNIVERSIDAD TECNOLOGICA DE LOS ANDES CARRERA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
Figura 3. Pantalla de inicio de Jflap 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 la barra de men la operacin 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 autmata. UNIVERSIDAD TECNOLOGICA DE LOS ANDES CARRERA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
Para crear una transicin de un estado hacia el mismo, ubquese en el estado y haga un doble clic. Y la calavera es para eliminar.
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 q 0 como estado inicial y q 1 como estado de aceptacin. El diagrama debe verse ms o menos de la siguiente forma: UNIVERSIDAD TECNOLOGICA DE LOS ANDES CARRERA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
Figura 7. Creacin del AF, parte3/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:
Figura 9. Evaluacin de una cadena por el AF, parte 2/3 UNIVERSIDAD TECNOLOGICA DE LOS ANDES CARRERA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
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:
Dicha cadena deber ser aceptada (verde) si se llega al estado final cumpliendo con las reglas del alfabeto (gramtica) definida por el autmata (de estado a estado). Si un carcter no forma parte del alfabeto del autmata (si no es reconocido) o no cumple con las reglas entre un estado y otro, entonces la cadena es rechazada (rosado). El autmata puede ser guardado, para ello utilizar el men File y la opcin Save / Save As
UNIVERSIDAD TECNOLOGICA DE LOS ANDES CARRERA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
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.
Una forma sencilla de implementar autmatas 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 break; case 'b': state break; case 'c': state break; case '_':
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 1; 1; 1; UNIVERSIDAD TECNOLOGICA DE LOS ANDES CARRERA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
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; } Evalu las siguientes cadenas en el autmata creado y marque con una X las que son aceptadas por este:
Actividades para resolver: 1: Actividad Construya un autmata que cumpla con las caractersticas presentadas por la tabla de transiciones siguiente: Estado Smbolo de Entrada
2: Actividad Describa las cadenas que acepta el autmata finito determinista representado en el siguiente diagrama de transiciones:
3: Actividad Identifique otro autmata finito determinista de la vida diaria y dibuje su diagrama de transiciones.