miércoles, 14 de octubre de 2009

Programa automata

Bueno aqui les dejo el codigo de un atomata, este solo lee palabras comenzadas con letras separadas por signos como el * y el +.


/*
* To change this template, choose Tools Templates
* and open the template in the editor.
*/

package automata;
import java.io.*;

/*
* @author Carlos Alfredo
*/

public class automata
{
public static void main(String args[]) throws IOException
{
String cadena;
String cadena2;

try
{

BufferedReader n=new BufferedReader(new FileReader("Palabra.txt")); //Aqui lee el archivo donde se almacena las palabras
while((cadena=n.readLine())!=null){
//cadena=n.readLine();
comprueba(cadena);
}

}
catch(FileNotFoundException e)
{
System.out.println("No se pudo leer el archivo");
}
}

public static void comprueba(String palabra)
{
String nuevacadena=palabra+ '%';
int tam=nuevacadena.length();

int mat [][]=new int [8][5];

// TABLA DE TRANSICIONES

// L N + * FC
mat[1][0]=2; mat[1][1]=2; mat[1][2]=4; mat[1][3]=4; mat[1][4]=90;
mat[2][0]=5; mat[2][1]=6; mat[2][2]=3; mat[2][3]=3; mat[2][4]=100;
mat[3][0]=2; mat[3][1]=2; mat[3][2]=7; mat[3][3]=7; mat[3][4]=90;
mat[4][0]=4; mat[4][1]=4; mat[4][2]=4; mat[4][3]=4; mat[4][4]=90;
mat[5][0]=5; mat[5][1]=5; mat[5][2]=5; mat[5][3]=5; mat[5][4]=90;
mat[6][0]=6; mat[6][1]=6; mat[6][2]=6; mat[6][3]=6; mat[6][4]=90;
mat[7][0]=7; mat[7][1]=7; mat[7][2]=7; mat[7][3]=7; mat[7][4]=90;

//comienza el ciclo, donde compara cada una de las letras de la palabra.
int reng=1,colu=0;
try
{
for(int i=0;i {
if(Character.isLetter(nuevacadena.charAt(i)))
{
colu=0;
reng=mat[reng][colu];
}
if(Character.isDigit(nuevacadena.charAt(i)))
{
colu=1;
reng=mat[reng][colu];
}
if(nuevacadena.charAt(i)=='+')
{
colu=2;
reng=mat[reng][colu];
}
if(nuevacadena.charAt(i)=='*')
{
colu=3;
reng=mat[reng][colu];
}
if(nuevacadena.charAt(i)=='%') //Marca el fin de cadena
{
nuevacadena=palabra;
colu=4;
if(mat[reng][colu]==100)
{
System.out.print(nuevacadena+"\tCadena Valida\n");
}
else
System.out.print(nuevacadena+"\tCadena Invalida\n");
}
}
}catch (ArrayIndexOutOfBoundsException exc)
{
}
}
}

No hay comentarios:

Publicar un comentario