Está en la página 1de 14

Compiladores, Gua 2

Facultad : Ingeniera Escuela : Computacin Asignatura: Compiladores

Tema: AUTOMATAS DE ESTADO FINITO.

Objetivo
Conocer las caractersticas bsicas de un Autmata de Estado Finito Determinista. Crear algunas secuencias de cadenas evaluadas por un FDA (Autmata Finito Determinista).

Introduccin
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. Los autmatas finitos se clasifican en: o o Autmatas finitos no determinsticos. DNFA Autmatas finitos determinsticos. DFA

Autmata Finito Determinstico: Consiste en un dispositivo que puede estar en un estado de entre un nmero finito de los mismos; uno de ellos ser el estado inicial y por lo menos uno ser estado de aceptacin. Tiene un flujo de entrada por el cual llegan los smbolos de una cadena que pertenecen a un alfabeto determinado. Se detecta el smbolo y dependiendo de este y del estado en que se encuentre har una transicin a otro estado o permanece en el mismo. El mecanismo de control (programa) es que determina cual es la transicin a realizar.

Compiladores, Gua 2

La palabra finito se refiere a que hay un nmero finito de estados. La palabra determinista es porque el mecanismo de control (programa) no debe tener ambigedades, es decir, en cada estado solo se puede dar una y solo una (ni dos ni ninguna) transicin para cada smbolo posible. El autmata acepta la cadena de entrada si la mquina cambia a un estado de aceptacin despus de leer el ltimo smbolo de la cadena. Si despus del ltimo smbolo la mquina no queda en estado de aceptacin, se ha rechazado la cadena. Si la mquina llega al final de su entrada antes de leer algn smbolo la entrada es una cadena vaca (cadena que no contiene smbolos) y la representaremos con f. Solo aceptar f si su estado inicial es de aceptacin. Definicin formal: Formalmente, un autmata finito es una 5-tupla (Q, , q0, , F) donde:

es un conjunto finito de estados; es un alfabeto finito; es el estado inicial; es una funcin de transicin; es un conjunto de estados finales o de aceptacin.

Funcionamiento. En el comienzo del proceso de reconocimiento de una cadena de entrada, el AF se encuentra en el estado inicial y a medida que procesa cada smbolo de la cadena va cambiando de estado de acuerdo a lo determinado por la funcin de transicin. Cuando se ha procesado el ltimo de los smbolos de la cadena de entrada, el autmata se detiene. Si el estado en el que se detuvo es un estado de aceptacin, entonces la cadena pertenece al lenguaje reconocido por el autmata; en caso contrario, la cadena no pertenece a dicho lenguaje.

Compiladores. Gua 2 3 Note que el estado inicial de un AF siempre es nico, en tanto que los estados finales pueden ser ms de uno. Tambin puede darse el caso de que un estado final corresponda al mismo estado inicial. Representacin como diagramas de estados Los autmatas finitos se pueden representar mediante grafos particulares, tambin llamados diagramas de estados finitos, de la siguiente manera: Los estados se representan como vrtices, etiquetados con su nombre en el interior. Una transicin desde un estado a otro, dependiente de un smbolo del alfabeto, se representa mediante una arista dirigida que une a estos vrtices, y que est etiquetada con dicho smbolo. El estado inicial se caracteriza por tener una arista que llega a l, proveniente de ningn otro vrtice. El o los estados finales se representan mediante vrtices que estn encerrados a su vez por otra circunferencia.

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

Compiladores, Gua 2

Ejemplo: El siguiente autmata (FIG 1), el cual, para el alfabeto S = { a, b, c } reconoce la cadena c, la cadena a, las cadenas que empiezan por a y acaban en a o en b y las que empiezan por a, seguidas de una serie de a de b y acaban en c. Su diagrama ser:

Autmata finito no determinista


Un autmata finito no determinista (abreviado AFND) es un autmata finito que, a diferencia de los autmatas finitos deterministas (AFD), posee al menos un estado q Q, tal que para un smbolo a del alfabeto, existe ms de una transicin (q,a) posible. En un AFND puede darse cualquiera de estos dos casos: Que existan transiciones del tipo (q,a)=q1 y (q,a)=q2, siendo q1 q2; Que existan transiciones del tipo (q,), siendo q un estado no-final, o bien un estado final pero con transiciones hacia otros estados. Cuando se cumple el segundo caso, se dice que el autmata es un autmata finito no determinista con transiciones vacas o transiciones (abreviado AFND-). Estas transiciones permiten al autmata cambiar de estado sin procesar ningn smbolo de entrada.

Compiladores. Gua 2 5

En este ejemplo, (q0,b)=q0 y (q0,b)=q1. Por lo tanto, se trata de un autmata finito no determinista, que reconoce la expresin regular (a|b)*b+. en un AFND la funcin de transicin se define como:

Para el caso de los AFND-, se suele expresar la funcin de transicin de la forma:

donde P(Q) es el conjunto potencia de Q. Esto significa que los autmatas finitos deterministas son un caso particular de los no deterministas, puesto que Q pertenece al conjunto P(Q). La interpretacin que se suele hacer en el cmputo de un AFND es que el automta puede pasar por varios estados a la vez, generndose una ramificacin de las configuraciones existentes en un momento dado. Asimismo, en un autmata finito no determinista podemos aceptar la existencia de ms de un nodo inicial.

Materiales y equipo
Gua de Laboratorio N 2. Computadora con programa: o Compilador de Visual C++ o JFLAP. Dispositivo de Almacenamiento (USB).

Procedimiento
PARTE I (Creacin de un Autmata Simple). Ingrese a la carpeta llamada JFLAP. (El instructor le indicar como tenerla disponible) Una vez cargada la aplicacin presione el botn Finite State Automaton y se deber cargar la siguiente ventana (Figura 2):

Compiladores, Gua 2

Cree el diagrama (autmata) del ejemplo siguientes instrucciones:

presentado arriba (figura 1) siguiendo las

1. 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. Y la calavera es para eliminar .

Compiladores. Gua 2 7

2. Luego de haber agregado los estados, es el momento de indicar cual 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:

Para crear una transicin de un estado hacia el mismo, ubquese en el estado y haga un doble clic. Para probar el autmata, seleccione Step by State del men Input para evaluar carcter por carcter de la cadena digitada. Digite la cadena:

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.

Compiladores, Gua 2

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

Anlisis de resultados

Actividad 1: Cree un autmata que contenga en su alfabeto S = { $, ., 0, 1, 2, 39 }, el cual reconoce la cadena con el siguiente formato: $xx.xx y $0.xx , es decir, una cantidad en dlares que comience con $, seguido de dos dgitos con dos decimales separados por un punto, o bien, una cantidad que comience con $, seguido de un cero con dos decimales separados por un punto. ( $10.99 o $0.45 respectivamente). Ayuda: Su autmata deber comenzar con la siguiente secuencia:

Compiladores. Gua 2 9

Actividad 2: En base al autmata creado anteriormente, generalice la expresin $xx.xx de tal forma que sea aceptada una cadena con cualquier cantidad en dlares, ya sea una cantidad entera o una cantidad entera con dos decimales $xxxxxxxxn.xx. Es decir el autmata aceptara una cantidad entera de dlares, por ejemplo $100000 y tambin una cantidad con dos decimales, por ejemplo $900000.99. Adems su autmata siempre deber permitir el formato $0.xx ($0.95). Ayuda: Su autmata debe incluir 2 estados finales (q2 y q6), uno para el formato con nmeros enteros (cantidad entera de dlares) y otro para el formato con decimales (cantidad entera con dos decimales de dlares). El autmata debe tener como mximo 7 estados (q0 a q6), incluyendo los 2 estados finales y el inicial.

Actividad 3: Construya un autmata que cumpla con las tabla de transiciones siguiente: Estado Smbolo de Entrada
Estado 0 1 2

caractersticas

presentadas por la

Smbolo de Entrada a b {0,1} {0} {2} {3}

Donde {0,1} indica el estado 0 y 1, y estado final es {3}. Ayuda: El autmata deber comenzar con la siguiente secuencia:

Compiladores, Gua 2

10

El autmata creado se le llama autmata finito no determinista, la nica diferencia con los anteriores est en que en la transicin en un estado determinado puede haber, para un mismo smbolo, ms de un arco o no haber ninguno (Para q0 existen 3 arcos o transiciones). Para hacer un programa de un autmata no determinista se podra hacer probando todas las rutas una a una hasta que se terminasen o se aceptase la cadena, lo cual no es eficiente por la cantidad de memoria necesaria (crece exponencialmente con el nmero de estados). Para analizar una cadena en un autmata finito no determinista vamos a seguir todas las transiciones posibles en paralelo (atravesamos todas las rutas a la vez); la cadena se aceptar si alguna de las rutas acaba en un estado de aceptacin. Nuestro estado en un momento dado ya no se hallar determinado por un estado del diagrama de transiciones, sino por la coleccin de los estados actuales de todas las rutas posibles. El autmata finito no determinista creado anteriormente aceptara las cadenas de entrada: abb, aabb, babb, aaabb

PARTE II (Simulacin de un Autmata Simple en Lenguaje C) En esta parte usted simulara el autmata finito resuelto en la Actividad 2, mediante la creacin de un pequeo programa en C/C++. A continuacin se presenta el pseudocdigo asociado al autmata creado en la Actividad 2:

/* Este pseudocodigo asume que la funcion recibe la cadena a evaluar por el automata*/ Variables: estado:entero; -- estado puede ser S0, S1, S2, S3, S4, S5, S6 next_car: caracter; -- char next_car lexema : string; -- lexema almacena caracter por caracter de la -- cadena a evaluar ( char lexema[80] )

Compiladores. Gua 2 11

Funcion Cantidad_en_Dolar(Cadena) --funcion void estado = S0; Repetir Conseguir el siguiente carcter -next_car=Cadena[] Agregar al lexema el siguiente carcter - lexema[] = next_car En CASO de (estado) sea S0: --estado inicial Si next_car es "$" entonces estado = S1; sino exit_Repetir; -- salir de Lazo Repetir fin_si S1: --"0" o "1-9" Si next_car es un digito entonces --isdigit(nextcar) Si es cero entonces estado = S3; sino estado = S2; sino exit_Repetir; fin_si S2: --"1-9"+digito+ Si next_car es un digito entonces estado=S2;

Pg
sino Si next_car es . entonces estado=S4; Sino Exit_Repetir; fin_si S3: --"0"+ Si next_car es "." entonces estado=S4; sino exit_Repetir; fin_si S4: --"0"+ "."+ ; "1-9"+ digito + "."+ Si next_car es un digito entonces estado=S5; sino exit_Repetir; fin_si S5: --"0"+ "."+ digito+ ; "1-9"+ digito+ "."+ digito+ Si next_car es un digito entonces estado=S6; sino exit_Repetir; fin_si S6: --estado final Si no es fin de cadena entonces -- next_car!=\0 estado=Se; --estado de

Compiladores, Gua 2

12

error exit_Repetir; fin_si Fin_CASO Repetir_hasta_que (next_car sea carcter nulo) -next_car==\0 o fin de cadena Si estado es S2 o S6 entonces Agregar al lexema el caracter nulo --lexema[]=\0 Imprimir "Cadena Aceptada" sino Imprimir "Cadena Rechazada" fin_si Fin_Funcion

Inicie Visual C++ y cree un programa que permita simular el autmata de la Actividad 2, utilizando como referencia el pseudocdigo anterior. Ayuda: Utilice como referencia algunas de las funciones: isdigit(), getchar() y getc().

Investigacin complementaria.
1.- Describa las cadenas que acepta el autmata finito determinista representado en el siguiente diagrama de transiciones:

2.- Modifique el siguiente esqueleto de diagrama de transiciones de manera que est completamente definido y acepte las mismas cadenas que antes.

3.- Identifique otro autmata finito determinista de la vida diaria y dibuje su diagrama de transiciones.

Compiladores. Gua 2 13

Bibliografa.

http://es.wikipedia.org/wiki/Aut%C3%B3mata_finito http://es.wikipedia.org/wiki/Aut%C3%B3mata_finito_no_determinista http://wapedia.mobi/es/Aut%C3%B3mata_finito_no_determinista

Compiladores, Gua 2

14

Hoja de cotejo:

2 1

Gua 2: Autmata de Estados Finitos.

Alumno: Docente:

Mquina No: GL: Fecha:

EVALUACION % 1-4 5-7 8-10 Nota

CONOCIMIENTO

40

APLICACIN DEL CONOCIMIENTO

40

ACTITUD 20

TOTAL 100%

También podría gustarte