28 de marzo de 2009

Automata hecho en Java

Hola.

Esta vez les traigo algo más sobre Java. Y específicamente algo de autómatas.

Tengo una clase que se llama Teoría de la Computación, en la cual estamos viendo analizadores léxicos, gramáticos, autómatas y algo más. Y pues tengo una maestra buena gente que nos comenzó enseñando teoría sobre los autómatas que finitos, determinísticos, no determinísticos etc., y el caso es que nos encargo a todo el grupo que, por equipos, programáramos un autómata (ella no lo asigno) en cualquier lenguaje de programación (por supuesto que elegí Java).

Las condiciones del programa eran:
1.- Recibir las cadenas de un archivo de texto
2.- Usar la matriz de transición
3.- Validar correctamente las cadenas y decir si eran validas o no

Suena sencillo (o al menos así lo escuche yo), y al momento de comenzar a programarlo, batalle mucho porque no sabía cómo utilizar correctamente la matriz de transición.

Así que comencé a leer, leer, leer y por ultimo internet. Y no encontraba algo solido, concreto que me pudiera ayudar. Pero nada que una mente joven no pueda resolver, varias desveladas y lo conseguí.

La representación grafica del autómata es algo parecida a esto.

Ya explicado para que le entiendan.

La cadena debe de empezar por una o más letras mayúsculas (L) (Cualquier letra del abecedario), seguido de una o más letras minúsculas (l) (Cualquier letra del abecedario), después puede seguir un digito cualquiera una o más veces (d), y ahí puede terminar el autómata. Sin embargo entra una condición más que contempla la entrada de un guion bajo (_) y seguido de un digito una o más veces. Concluye cuando después de la cadena se encuentra con un Enter, un Tabulador o un Espacio.

Como podemos ver, parece algo sencillo, pero no lo es. Por eso, yo lo quiero compartir con todos ustedes por si a alguna persona le sirve, lo puede descargar. Este es el archivo Automata.java (Cópienlo y lo guardan con la extensión .java) y este es el archivo Cadena.txt de donde toma las cadenas (los 2 archivos deben encontrarse dentro de la misma ubicación).

Espero y les sirva a más de uno. Si tienen alguna duda, pueden mandarme un correo electrónico para tratar de resolvérsela. Y si les sirve, pueden dejar un comentario para saber si le estoy ayudando a alguien, para poder darme cuenta y seguir poniendo mas códigos.

Ya para terminar quiero decirles que tengo en el comal una nueva versión de FCalculator, que estaré publicando la siguiente semana. Creo que será el día 4 de Abril. Como lo estoy acabando de darle su última pulida, no lo tuve listo para ponerlo hoy.

Nos vemos después con más novedades.

ACTUALIZACION:
Si te interesó este artículo sobre autómatas, puedes ver este otro autómata que diseñe especificamente para los programadores novatos como yo.

Es un autómata para verificar las constantes numéricas. Te lo recomiendo. Esta muy bien explicado.

25 pensamientos, más el tuyo!:

Anónimo dijo...

HOLA QUE TAL TU PROGRAMA LO COMPILE EN JAVA Y FUNCIONA CORRECTAMENTE. UNA CUESTION CON LA MATRIZ, EN QUE TE BASASTE PARA DARLE LOS VALORES, POR EJEMPLO LOS 200 Y3 100 AL CASO TABULAR, ESPACIO Y3 ENTER.

SALUDOS Y OJALA PUEDAS AYUDARME.

Manuel Alejandro dijo...

hola amigo me podrias aydar necesito hacer un automata que identifiqe una cadena de letras a y b , qe cuando las letras b superen el valor de 4 el programa valide que no se puede poner mas de 4 b y me lelve el cursor a la ultima b de mas. gracias mpr2314@hotmail.com

Julio Alberto dijo...

Hola amigo tu programa me esta ciendo de mucha ayuda para realisar un programa similar la unica diferencia del tuyo es que en un archivo de texto tengo una matriz donde ya confugure los estados los cuales ya estan todas las letras que quiero que conosca y en otro las letras que quiero que me compile y si nota alguna error en los estados me lo marque o em diga error en la compilacion y si no compilacion correcta es un proyecto de la escuela si me serviria de mucha ayuda ya que no lo he podido solucionar.
Mi correo el albertoy2j@rocketmail.com espero tu ayuda saludos

Anónimo dijo...

Bueno quisiera ver si me puedes ayudar a desarrollar un programa computacional en java que permita simular el funcionamiento de un AFD. El programa fun-cionará de acuerdo a lo siguiente: los 5 elemen-tos que definen al autómata: estados, alfabeto, estado inicial, estado(s) de aceptación y función de transición. Y El programa indica si la cadena es acep-tada o no por el autómata.
Espero y me puedas ayudar.

vivadios@hotmail.com

Anónimo dijo...

disculpa asi no era mi correo..jeje

es vivadios48@hotmail.com

Anónimo dijo...

ayudame a crear en java: el automata va a empesar con dos letras pares y luego caulquier combinacion de ellas y que ademas se muestre la imagen de como se va cumpliendo la aceptacin de la cadena es urgente si saves como echa la mano mi correo es :jgonzalez_2301@hotmail.com

Anónimo dijo...

pandillero_dark@hotmail.com
ese es mi correo espero me ayudes nesesito cualquier automata porfavor mandame los automatas q esten explicados como los hicistes ..
o mandame ami correo un automata te lo agradesco mucho porfa....

Anónimo dijo...

Hola !!
Muchisimas gracias !!
Muy buen trabajo, no te desanimes, a muchas personas les puedes ayudar. 10+ :)

Fer dijo...

Lo explicas muy bien, se entiende bien!!!

Parsifal dijo...

Hola amigo esta chido tu programa, pero me intriga eso de la matriz de transicion, ojala puedas indicarme algún libro donde venga explicado mas a fondo el uso de matrices de transicion con autómatas.

Saludos!

Victor Alfonso dijo...

Chécate abajo del post. Donde dice ACTUALIZACIÓN, ahí puse un link a otro autómata que esta un poco mas explicado. Sobre constantes numéricas.

Y no he encontrado algún libro de eso. Solo conocimientos escolares.

Si sigues teniendo duda, pregunta.

Anónimo dijo...

Hola apenas lo checare espero poder entenderle por que tengo unA material igual a la tuya y grax por compartir tus codigos

Anónimo dijo...

LA PERSONA QUE ME LO ENVIO ESTA TODAVIA ASOMBRADA DE LO OCURRIDO, YA QUE ELLA DICE QUE LO HIZO POR HACERLO Y QUE PIDIO ALGO QUE CREIA CASI IMPOSIBLE DE LOGRAR PROBEMOS.
* Para ti mismo di el nombre de la unica persona del sexo opuesto con quien quieras estar (tres veces...)...
* Piensa en algo que quieras lograr dentro de la proxima semana y repitelo para ti mismo(a) (seis veces)...
* Piensa en algo que quieras que pase entre tu y la persona especial (que dijiste en el no. 1) y dilo a ti mismo/a (doce veces)...
* Ahora haz un ultimo y final deseo acerca del deseo que escogiste.
* Despues de leer esto tienes 1 hora para mandarlo a 15 temas y lo que pediste se te hara realidad en 1 semana.
A la mayor cantidad de gente a quien lo mandes mas fuerte se hara tu deseo.
Si tu escoges ignorar esta carta lo contrario del deseo te sucedera,
responder

Anónimo dijo...

hola k tal la cuestion esk me dejaron dibujar automatas en applet y validar cadenas. espero me puedas ayudar adios.
an71@hotmail.com :-) este es mi correo

Anónimo dijo...

oye amigo pero como puedo mostrar este resultado de las transiciones en una intefaz grafica ke me indike en ke estado esta iniciales y fiales

Anónimo dijo...

Hola si me puedes ayudar con el codigo de este automata pero adicionando la convercion de este a un automata no determinista y ademas hallando su automata minimo.
gracias si me puedes ayudar enviamelo al siguiente correo lilobus@hotmail.com

Anónimo dijo...

Anónimo dijo...

LA PERSONA QUE ME LO ENVIO ESTA TODAVIA ASOMBRADA DE LO OCURRIDO, YA QUE ELLA DICE QUE LO HIZO POR HACERLO Y QUE PIDIO ALGO QUE CREIA CASI IMPOSIBLE DE LOGRAR PROBEMOS.
* Para ti mismo di el nombre de la unica persona del sexo opuesto con quien quieras estar (tres veces...)...
* Piensa en algo que quieras lograr dentro de la proxima semana y repitelo para ti mismo(a) (seis veces)...
* Piensa en algo que quieras que pase entre tu y la persona especial (que dijiste en el no. 1) y dilo a ti mismo/a (doce veces)...
* Ahora haz un ultimo y final deseo acerca del deseo que escogiste.
* Despues de leer esto tienes 1 hora para mandarlo a 15 temas y lo que pediste se te hara realidad en 1 semana.
A la mayor cantidad de gente a quien lo mandes mas fuerte se hara tu deseo.
Si tu escoges ignorar esta carta lo contrario del deseo te sucedera,
responder

Anónimo dijo...

LA PERSONA QUE ME LO ENVIO ESTA TODAVIA ASOMBRADA DE LO OCURRIDO, YA QUE ELLA DICE QUE LO HIZO POR HACERLO Y QUE PIDIO ALGO QUE CREIA CASI IMPOSIBLE DE LOGRAR PROBEMOS.
* Para ti mismo di el nombre de la unica persona del sexo opuesto con quien quieras estar (tres veces...)...
* Piensa en algo que quieras lograr dentro de la proxima semana y repitelo para ti mismo(a) (seis veces)...
* Piensa en algo que quieras que pase entre tu y la persona especial (que dijiste en el no. 1) y dilo a ti mismo/a (doce veces)...
* Ahora haz un ultimo y final deseo acerca del deseo que escogiste.
* Despues de leer esto tienes 1 hora para mandarlo a 15 temas y lo que pediste se te hara realidad en 1 semana.
A la mayor cantidad de gente a quien lo mandes mas fuerte se hara tu deseo.
Si tu escoges ignorar esta carta lo contrario del deseo te sucedera,
responder

Anónimo dijo...

LA PERSONA QUE ME LO ENVIO ESTA TODAVIA ASOMBRADA DE LO OCURRIDO, YA QUE ELLA DICE QUE LO HIZO POR HACERLO Y QUE PIDIO ALGO QUE CREIA CASI IMPOSIBLE DE LOGRAR PROBEMOS.
* Para ti mismo di el nombre de la unica persona del sexo opuesto con quien quieras estar (tres veces...)...
* Piensa en algo que quieras lograr dentro de la proxima semana y repitelo para ti mismo(a) (seis veces)...
* Piensa en algo que quieras que pase entre tu y la persona especial (que dijiste en el no. 1) y dilo a ti mismo/a (doce veces)...
* Ahora haz un ultimo y final deseo acerca del deseo que escogiste.
* Despues de leer esto tienes 1 hora para mandarlo a 15 temas y lo que pediste se te hara realidad en 1 semana.
A la mayor cantidad de gente a quien lo mandes mas fuerte se hara tu deseo.
Si tu escoges ignorar esta carta lo contrario del deseo te sucedera,
responder

Anónimo dijo...

LA PERSONA QUE ME LO ENVIO ESTA TODAVIA ASOMBRADA DE LO OCURRIDO, YA QUE ELLA DICE QUE LO HIZO POR HACERLO Y QUE PIDIO ALGO QUE CREIA CASI IMPOSIBLE DE LOGRAR PROBEMOS.
* Para ti mismo di el nombre de la unica persona del sexo opuesto con quien quieras estar (tres veces...)...
* Piensa en algo que quieras lograr dentro de la proxima semana y repitelo para ti mismo(a) (seis veces)...
* Piensa en algo que quieras que pase entre tu y la persona especial (que dijiste en el no. 1) y dilo a ti mismo/a (doce veces)...
* Ahora haz un ultimo y final deseo acerca del deseo que escogiste.
* Despues de leer esto tienes 1 hora para mandarlo a 15 temas y lo que pediste se te hara realidad en 1 semana.
A la mayor cantidad de gente a quien lo mandes mas fuerte se hara tu deseo.
Si tu escoges ignorar esta carta lo contrario del deseo te sucedera,
responder

Anónimo dijo...

LA PERSONA QUE ME LO ENVIO ESTA TODAVIA ASOMBRADA DE LO OCURRIDO, YA QUE ELLA DICE QUE LO HIZO POR HACERLO Y QUE PIDIO ALGO QUE CREIA CASI IMPOSIBLE DE LOGRAR PROBEMOS.
* Para ti mismo di el nombre de la unica persona del sexo opuesto con quien quieras estar (tres veces...)...
* Piensa en algo que quieras lograr dentro de la proxima semana y repitelo para ti mismo(a) (seis veces)...
* Piensa en algo que quieras que pase entre tu y la persona especial (que dijiste en el no. 1) y dilo a ti mismo/a (doce veces)...
* Ahora haz un ultimo y final deseo acerca del deseo que escogiste.
* Despues de leer esto tienes 1 hora para mandarlo a 15 temas y lo que pediste se te hara realidad en 1 semana.
A la mayor cantidad de gente a quien lo mandes mas fuerte se hara tu deseo.
Si tu escoges ignorar esta carta lo contrario del deseo te sucedera,
responder

Anónimo dijo...

LA PERSONA QUE ME LO ENVIO ESTA TODAVIA ASOMBRADA DE LO OCURRIDO, YA QUE ELLA DICE QUE LO HIZO POR HACERLO Y QUE PIDIO ALGO QUE CREIA CASI IMPOSIBLE DE LOGRAR PROBEMOS.
* Para ti mismo di el nombre de la unica persona del sexo opuesto con quien quieras estar (tres veces...)...
* Piensa en algo que quieras lograr dentro de la proxima semana y repitelo para ti mismo(a) (seis veces)...
* Piensa en algo que quieras que pase entre tu y la persona especial (que dijiste en el no. 1) y dilo a ti mismo/a (doce veces)...
* Ahora haz un ultimo y final deseo acerca del deseo que escogiste.
* Despues de leer esto tienes 1 hora para mandarlo a 15 temas y lo que pediste se te hara realidad en 1 semana.
A la mayor cantidad de gente a quien lo mandes mas fuerte se hara tu deseo.
Si tu escoges ignorar esta carta lo contrario del deseo te sucedera,
responder

Anónimo dijo...

LA PERSONA QUE ME LO ENVIO ESTA TODAVIA ASOMBRADA DE LO OCURRIDO, YA QUE ELLA DICE QUE LO HIZO POR HACERLO Y QUE PIDIO ALGO QUE CREIA CASI IMPOSIBLE DE LOGRAR PROBEMOS.
* Para ti mismo di el nombre de la unica persona del sexo opuesto con quien quieras estar (tres veces...)...
* Piensa en algo que quieras lograr dentro de la proxima semana y repitelo para ti mismo(a) (seis veces)...
* Piensa en algo que quieras que pase entre tu y la persona especial (que dijiste en el no. 1) y dilo a ti mismo/a (doce veces)...
* Ahora haz un ultimo y final deseo acerca del deseo que escogiste.
* Despues de leer esto tienes 1 hora para mandarlo a 15 temas y lo que pediste se te hara realidad en 1 semana.
A la mayor cantidad de gente a quien lo mandes mas fuerte se hara tu deseo.
Si tu escoges ignorar esta carta lo contrario del deseo te sucedera,
responder

Anónimo dijo...

LA PERSONA QUE ME LO ENVIO ESTA TODAVIA ASOMBRADA DE LO OCURRIDO, YA QUE ELLA DICE QUE LO HIZO POR HACERLO Y QUE PIDIO ALGO QUE CREIA CASI IMPOSIBLE DE LOGRAR PROBEMOS.
* Para ti mismo di el nombre de la unica persona del sexo opuesto con quien quieras estar (tres veces...)...
* Piensa en algo que quieras lograr dentro de la proxima semana y repitelo para ti mismo(a) (seis veces)...
* Piensa en algo que quieras que pase entre tu y la persona especial (que dijiste en el no. 1) y dilo a ti mismo/a (doce veces)...
* Ahora haz un ultimo y final deseo acerca del deseo que escogiste.
* Despues de leer esto tienes 1 hora para mandarlo a 15 temas y lo que pediste se te hara realidad en 1 semana.
A la mayor cantidad de gente a quien lo mandes mas fuerte se hara tu deseo.
Si tu escoges ignorar esta carta lo contrario del deseo te sucedera,
responder

Anónimo dijo...

LA PERSONA QUE ME LO ENVIO ESTA TODAVIA ASOMBRADA DE LO OCURRIDO, YA QUE ELLA DICE QUE LO HIZO POR HACERLO Y QUE PIDIO ALGO QUE CREIA CASI IMPOSIBLE DE LOGRAR PROBEMOS.
* Para ti mismo di el nombre de la unica persona del sexo opuesto con quien quieras estar (tres veces...)...
* Piensa en algo que quieras lograr dentro de la proxima semana y repitelo para ti mismo(a) (seis veces)...
* Piensa en algo que quieras que pase entre tu y la persona especial (que dijiste en el no. 1) y dilo a ti mismo/a (doce veces)...
* Ahora haz un ultimo y final deseo acerca del deseo que escogiste.
* Despues de leer esto tienes 1 hora para mandarlo a 15 temas y lo que pediste se te hara realidad en 1 semana.
A la mayor cantidad de gente a quien lo mandes mas fuerte se hara tu deseo.
Si tu escoges ignorar esta carta lo contrario del deseo te sucedera,
responder