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;
}
}
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
alguien que me ayude con el siguiente automa en java el automata tiene que validar ceros y unos en en el estado q0 estan los ceros en caso de aver un uno avansa al estado q1, pero en el estado q1 tiene que aver un ciclo de unos
ResponderEliminarno me corre el programa 2
ResponderEliminar