jueves, 14 de enero de 2010

Automata que acepta las letras del abecedario en mayusculas y minusculas

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

/*
Automata.java

Este es un automata que valida cadenas a partir de un archivo de texto.

Las condiciones son:

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.

Scorpion Black 2009

http://vscorpionblack.blogspot.com

*/
import java.io.*;
public class Automata
{
public static void main(String args[]) throws IOException
{
String cadena;
String cadena2;

try
{

BufferedReader n=new BufferedReader(new FileReader("Cadenas.txt"));
while((cadena=n.readLine())!=null){
//cadena=n.readLine();
comprueba(cadena);
}

}
catch(FileNotFoundException e)
{
System.out.println("No se encuentra el archivo");
}
}
public static void comprueba(String palabra)
{
String nuevacadena=palabra;
int tam=nuevacadena.length();

int matriz [][]=new int [4][8];
// L l d _ espacio tabular enter cualquier simbolo
matriz[0][0]=1; matriz[0][1]=0; matriz[0][2]=0; matriz[0][3]=0; matriz[0][4]=200; matriz[0][5]=200; matriz[0][6]=200; matriz[0][7]=0;
matriz[1][0]=1; matriz[1][1]=2; matriz[1][2]=0; matriz[1][3]=0; matriz[1][4]=200; matriz[1][5]=200; matriz[1][6]=200; matriz[0][7]=0;
matriz[2][0]=0; matriz[2][1]=2; matriz[2][2]=3; matriz[2][3]=0; matriz[2][4]=200; matriz[2][5]=200; matriz[2][6]=200; matriz[0][7]=0;
matriz[3][0]=0; matriz[3][1]=0; matriz[3][2]=3; matriz[3][3]=2; matriz[3][4]=100; matriz[3][5]=100; matriz[3][6]=100; matriz[0][7]=0;

int ren=0,col=0,flag=0;
try
{
for(int i=0;i
{
switch(nuevacadena.charAt(i))
{
case 'A':
System.out.print("A");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'B':
System.out.print("B");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'C':
System.out.print("C");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'D':
System.out.print("D");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'E':
System.out.print("E");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'F':
System.out.print("F");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'G':
System.out.print("G");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'H':
System.out.print("H");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'I':
System.out.print("I");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'J':
System.out.print("J");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'K':
System.out.print("K");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'L':
System.out.print("L");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'M':
System.out.print("M");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'N':
System.out.print("N");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'O':
System.out.print("O");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'P':
System.out.print("P");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'Q':
System.out.print("Q");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'R':
System.out.print("R");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'S':
System.out.print("S");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'T':
System.out.print("T");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'U':
System.out.print("U");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'V':
System.out.print("V");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'W':
System.out.print("W");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'X':
System.out.print("X");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'Y':
System.out.print("Y");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'Z':
System.out.print("Z");
col=0;
if(ren==0||ren==1)
ren=matriz[ren][col];
else
flag=1;

break;

case 'a':
System.out.print("a");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'b':
System.out.print("b");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'c':
System.out.print("c");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'd':
System.out.print("d");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'e':
System.out.print("e");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'f':
System.out.print("f");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'g':
System.out.print("g");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'h':
System.out.print("h");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'i':
System.out.print("i");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'j':
System.out.print("j");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'k':
System.out.print("k");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'l':
System.out.print("l");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'm':
System.out.print("m");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'n':
System.out.print("n");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'o':
System.out.print("o");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'p':
System.out.print("p");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'q':
System.out.print("q");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'r':
System.out.print("r");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 's':
System.out.print("s");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 't':
System.out.print("t");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'u':
System.out.print("u");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'v':
System.out.print("v");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'w':
System.out.print("w");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'x':
System.out.print("x");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'y':
System.out.print("y");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case 'z':
System.out.print("z");
col=1;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case '0':
System.out.print("0");
col=2;
if(ren==1||ren==2)
ren=matriz[ren][col];
else
flag=1;

break;

case '1':
System.out.print("1");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '2':
System.out.print("2");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '3':
System.out.print("3");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '4':
System.out.print("4");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '5':
System.out.print("5");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '6':
System.out.print("6");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '7':
System.out.print("7");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '8':
System.out.print("8");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '9':
System.out.print("9");
col=2;
if(ren==2||ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case '_':
System.out.print("_");
col=3;
if(ren==3)
ren=matriz[ren][col];
else
flag=1;

break;

case 32:
col=4;
ren=matriz[ren][col];
if(ren==100) //estado de aceptacin
{

System.out.println(" Cadena Valida \n");
ren=0;
}

else if(ren==200||flag==1) //estado de error
{

System.out.print(" Cadena invalida \n");
ren=0;
}
break;

case 9:
col=5;
ren=matriz[ren][col];
if(ren==100) //estado de aceptacin
{

System.out.println(" Cadena Valida \n");
ren=0;
}

else if(ren==200||flag==1) //estado de error
{

System.out.print(" Cadena invalida \n");
ren=0;
}
break;

case 11:
col=6;
ren=matriz[ren][col];
if(ren==100) //estado de aceptacin
{

System.out.println(" Cadena Valida \n");
ren=0;
}

else if(ren==200||flag==1) //estado de error
{

System.out.print(" Cadena invalida \n");
ren=0;
}
break;

default:
System.out.print(nuevacadena.charAt(i));
col=7;
if(ren==0||ren==1||ren==2)
flag=1;
ren=matriz[ren][col];
break;
}

}
}
catch (ArrayIndexOutOfBoundsException exc)
{
}
}
}

No hay comentarios:

Publicar un comentario