El conjunto de las palabras en {a, b} tales que toda a est´a precedida por alguna
b, como por ejemplo “"”, “b”, “bba”, “babaa”, etc.
Este programa acepta palabras que contengan solo a y b en su lenguaje, con la unica condicion es que por cada a que coloquemos siempre debe de haber una b:
b, como por ejemplo “"”, “b”, “bba”, “babaa”, etc.
Este programa acepta palabras que contengan solo a y b en su lenguaje, con la unica condicion es que por cada a que coloquemos siempre debe de haber una b:
Palabras aceptadas: b, ba, bab, baba, bababa, bbabbabb etc.
No aceptadas: a, ab, abb, ababaa, abbba, etc.
Con el siguiente automata finito:
Y la Tabla de Transiciones:
Estado a b FC
1 2 3 A
2 2 2 E
3 4 3 A
4 2 3 A
public class Lexico {
public String comprueba(String palabra)
{
String nuevacadena=palabra+ '%';
int tam=nuevacadena.length();
String resultado=null;
int mat [][]=new int [5][3];
// TABLA DE TRANSICIONES
// A B FC
mat[0][0]=2; mat[0][1]=3; mat[0][2]=90;
mat[1][0]=2; mat[1][1]=2; mat[1][2]=90;
mat[2][0]=4; mat[2][1]=3; mat[2][2]=100;
mat[3][0]=2; mat[3][1]=3; mat[3][2]=100;
//comienza el ciclo, donde compara cada una de las letras de la palabra.
int reng=1, colu=0;
try
{
for(int i=0;i
reng=reng-1;
if(nuevacadena.charAt(i)=='a')
{
colu=0;
reng=mat[reng][colu];
}
if(nuevacadena.charAt(i)=='b')
{
colu=1;
reng=mat[reng][colu];
}
if(nuevacadena.charAt(i)=='%') //Marca el fin de cadena
{
nuevacadena=palabra;
colu=2;
if(mat[reng][colu]==100)
{
resultado= "Cadena Valida";
}
else
resultado= "Cadena Invalida";
}
}
}catch (ArrayIndexOutOfBoundsException exc)
{
}
return resultado;
}
}
Programación del botón:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(null, jTextField1.getText());
Lexico app= new Lexico();
jTextField2.setText(app.comprueba(jTextField1.getText()));
}
