Documentos de Académico
Documentos de Profesional
Documentos de Cultura
coincidan con determinado símbolo. inicios El Conjunto Estados a partir de los cuales
se realiza el recorrido. alcanzados Conjunto donde se guardan los Estados alcanzados.
símbolo Buscado Símbolo que debe seguirse en las Transición
//Automata.java
package afndaunafd.modelo;
import java.util.*;
public Automata() {
super();
Alfabeto = new TreeSet<String>();
estadoFinal = new TreeSet<Integer>();
@SuppressWarnings("unchecked")
public void addLetraAlfabeto(String letra) {
Alfabeto.add(letra);
TablaTransiciones = new TreeSet[numEstados][Alfabeto.size()];
iniciarTablaTransiciones();
}
EstadoActual = EstadoInicial;
String[] letras = palabra.split("");
return false;
}
}
}
//Transformador.java
package afndaunafd.modelo;
import java.util.Stack;
import java.util.TreeSet;
import java.util.Vector;
import javax.swing.JOptionPane;
//Esta clase implementa las clases para implementar las conversiones de afnd a afd
/* Implementación de código fuente para verificar las transiciones vacías, quitadas. Tambien
para verificar si el autómata ya es determinista*/
nombre = automata.getNombre();
numestados = automata.getnumEstados();
alfabeto = automata.getAlfabeto();
estadoInicial = automata.getEstadoInicial();
estadoFinal = automata.getestadoFinal();
tabtrans = automata.getTablaTransiciones();
if (alfabeto.contains("E")) {
JOptionPane.showMessageDialog(null, "Quitando tranciciones vacias");
quitarTansicionesVacias();
JOptionPane.showMessageDialog(null, "tranciciones vacias quitadas");
} else {
JOptionPane.showMessageDialog(null, "no tiene tranciciones vacias");
}
if (noEsDeterminista()) {
JOptionPane.showMessageDialog(null, "Quitando indeterminismo");
quitarIndeterminismo();
JOptionPane.showMessageDialog(null, "Indeterminismo quitado");
} else {
JOptionPane.showMessageDialog(null, "Ya es determinista");
while (!verificarMinimo()) {
minimizar();
}
JOptionPane.showMessageDialog(null, "Es minimo");
///-nuevo
if (nuevosEstados.indexOf(tranO) != -1) {
tran.add(nuevosEstados.indexOf(tranO));
}
numestados = nuevosEstados.size();
estadoFinal = finales;
tabtrans = tablaaux;
System.out.println();
}
/* Verifica si la expression es determinista*/
private boolean noEsDeterminista() {
boolean b = false;
TreeSet<Integer> ts = new TreeSet<Integer>();
for (String s : alfabeto) {
for (int cont = 0; cont < numestados; cont++) {
ts = obtenerTransicion(cont, s);
if (ts != null && ts.size() > 1) {
b = true;
}
}
}
return b;
}
/*Implementa la operación Cerradura Épsilon sobre un Conjunto de Estados parámetros
estados Conjunto de Estados sobre el cual aplicar operación retorna El Conjunto de estados
alcanzados y cerrando todas las vacias
*/
TreeSet<Integer> f = cerrarVacias(estadoInicial);
boolean cq0F = false;
System.out.println();
}
while (!pila.isEmpty()) {
ts = pila.pop();
/*Verifica el minimo de el numero de estados desde el final hasta el inicial del alfabeto
ingresado
if (x < y) {
if (estados[y][x] == 1) {
estados[cont][cont2] = 1;
}
} else {
if (estados[x][y] == 1) {
estados[cont][cont2] = 1;
}
}
if (y != x) {
estados[cont][cont2] = 1;
}
}
}
if (tamaño != alfabeto.size()) {
estados[cont][cont2] = 1;
}
}
}
return f;
/**Realiza un recorrido del autómata a partir de un Estado inicial y pasando por todas las
Transiciones que coincidan con determinado símbolo Este algoritmo corresponde a una
generalización del algoritmo de que el mismo pueda utilizarse para las dos operaciones de
Cerradura**/
if (y < x) {
if (estados[x][y] == 1) {
estados[cont][cont2] = 1;
}
} else {
if (estados[y][x] == 1) {
estados[cont][cont2] = 1;
}
}
if (x != y) {
estados[cont][cont2] = 1;
}
}
}
if (tamaño != alfabeto.size()) {
estados[cont][cont2] = 1;
}
}
}
Vector<TreeSet> vector = new Vector<TreeSet>();
TreeSet<Integer> ts;
boolean f;
ts.add(cont);
ts.add(cont2);
f = true;
TreeSet<Integer> tran;
int t0;
TreeSet<Integer> t1;
for (String s : alfabeto) {
for (TreeSet<Integer> tsi : vector) {
tran = new TreeSet<Integer>();
for (Integer i : tsi) {
tran.addAll(obtenerTransicion(i, s));
}
t0 = vector.indexOf(tsi);
t1 = new TreeSet<Integer>();
for (TreeSet<Integer> tsi2 : vector) {
if (tran.size() > 0 && tsi2.containsAll(tran)) {
t1.add(vector.indexOf(tsi2));
}
}
}
}
estadoInicial = q00;
numestados = vector.size();
estadoFinal = finales;
tabtrans = tablaTemp;
System.out.println();
}
}