CREACIÓN DE AUTÓMATAS PARA LA VALIDACIÓN DE GRAMÁTICAS
AUTÓMATA N°1 (GRAMATICA (an b)):
package Clases;
//@author Systatem Technology
//http://www.systatem.com
public class Automata1 {
private char[] carac; //Vector que contenera la cadena
private int cont; //indice del vector
private boolean flag ; //Afirma o Niega la gramatica de la cadena
//Proceso (capturaCadena), trae una cadena ingresada desde tu interfaz grafica
//y lo convierte en un vector (en este caso 'carac')
public void capturaCadena(String cad){
carac = cad.toCharArray();//Convierte la cadena a un vector de tipo 'CHAR'
}
public void Inicio(){
if (carac[0]=='a') { //Verifica que el primer caracter de la cadena se 'a'
cont = 0;
X();//Inicia el proceso X
}else{
qError();//Niega la gramatica de la cadena
}
}
private void X(){
//Condiciona que el indice del vector se menor al tamaño del mismo
//Si la condicion es verda entra al proceso
if (cont<carac.length) {
//Condiciona el vector que contiene la cadena en su indice actual que se igual a el caracter 'a'
//Si la condicion es verdadera el indice del vector incrementa en 1 y vuelve a repetir el mismo proceso
//Si la condicion es Falsa y el vector en indice actual es igual al caracter 'b', el indice del
//vector incrementa en 1 y se va al proceso T (Finalizacion del automata)
if (carac[cont]=='a') {
cont ++;
X();//Regresa al proceso X
}else if(carac[cont]=='b'){
cont ++;
T(); //Inicia el proceso de Finalizacion
}else{
qError();//Proceso que niega la gramatica de la cadena no es (a^n)(b)
}
}
}
//El proceso T finaliza el automata: Afirmando o negando si la gramatica de la
//cadena ingresada es (a^n)(b)
private void T(){
flag = true ;//Inicia flag con verdadero
if (cont == carac.length) {
flag = true;//Afirma la gramatica de la cadena
}else{
flag = false;//Niega la gramatica de la cadena
}
}
private void qError() {
flag = false;//Niega la cadena
}
public boolean Flag(){
return flag;//retorna el valor de Flag
}
}
INTERFAZ GRÁFICA
AUTÓMATA N°2 (GRAMATICA (a bn c)):
package Clases;
/**
* @author Systatem Technology
* http://www.systatem.com
*/
public class Automata5 {
private char[] car;//Vector tipo char que contenera la cadena
private boolean flag; //afirmara y negara si la gramatica de la cadena ingresada es (a^n)(b)(c)
private int con;//indice del vector
public void capturarCadena(String cad){
car = cad.toCharArray();//convierte la cadena en un vector de caracteres
}
public void Inicio(){
if (car[0]=='a') {//verifica que el indice inicial del vector sea 'a'
X();
con = 0; //incia el indice en 0
}else{
flag = false; //Niega la gramatica de la cadena
}
}
private void X() {
//Condiciona que el indice del vector se menor a el tamaño del vector
//Si se cumple la condicion, eentra a la siguiente condicion y
//Si no se cumple la condicion entra al proceso qError
if (con<car.length) {
//Condiciona que el vector en idice actual sea 'a'
//Si esto es verda, el indice del vector incrementa y engtra al proceso S
//Si no Finaliza el automata entrando al proceso(F)
if (car[con]=='a') {
con ++;
S();
}else{
F();
}
}else{
qError();//Finaliza el automata
}
}
private void S() {
//Condiciona que el indice del vector sea menor al tamaño del vector
if (con<car.length) {
//Condiciona que el vector en su indice actual sea 'b'
//Si es verdad el indice incrementa en 1 y regresa al mismo proceso S
//Si no es asi condiciona que el vector en su indice actual sea 'c'
//Si esta nueva condicion es verdad el indice incrementa en 1 y finaliza
//el automata con el proceso F
//Y si estas dos condiones son falsas entra al proceso qError
if (car[con]=='b') {
con ++;
S();
}else if(car[con]=='c'){
con ++;
F();
}else{
qError();
}
}
}
//Proceso F: verifica que el indice del vector se igual al tamaño del vector
private void F() {
flag = true;
if (con == car.length) {
flag = true;//Afirma que la gramatica de la cadena ingresada es (a)(b^n)(c)
}else{
flag = false;//Niega que la gramatica de la cedana ingresada es (a)(b^n)(c)
}
}
//qError: Nos dice que la gramatica de la cadena ingresada no es (a)(b^n)(c)
private void qError(){
System.err.println("En error");
flag = false;
}
public boolean Val(){
return flag;
}
}
INTERFAZ GRÁFICA
DESCARGAR EJEMPLO