Esempio n. 1
0
        private void metodoSubConjuntos()
        {
            if (raiz != null)
            {
                Mover primero = new Mover();
                primero.addEstado(raiz.Index);
                cerraduras.AddLast(makeCerradura(primero));
                for (int k = 0; k < cerraduras.Count; k++)
                {
                    Transicion transition = new Transicion(cerraduras.ElementAt(k).getNumEstado());
                    foreach (Nodo item in NonTerminals)
                    {
                        Mover temp = makeMove(cerraduras.ElementAt(k).getEstados(), item);
                        if (temp != null)
                        {
                            if (temp.getEstados().Count > 0)
                            {
                                if (!mueves.Contains(temp))
                                {
                                    mueves.AddLast(temp);
                                }

                                Cerradura temporal = makeCerradura(temp);
                                if (temporal != null)
                                {
                                    if (temporal.getEstados().Count > 0)
                                    {
                                        if (!cerraduras.Contains(temporal))
                                        {
                                            cerraduras.AddLast(temporal);
                                        }
                                    }
                                }
                                transition.addTransicion(new Destino(item.getDato(), temporal.getNumEstado()));
                            }
                        }
                    }
                    transicionesEstados.AddLast(transition);
                }
                foreach (Cerradura cer in cerraduras)
                {
                    if (cer.isEstadoFinal())
                    {
                        foreach (Transicion t in transicionesEstados)
                        {
                            if (cer.getNumEstado() == t.getEstado())
                            {
                                t.isEstadoFinal();
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        private Cerradura makeCerradura(Mover m)
        {
            contadorEstados++;
            encontrados = new ArrayList();
            Nodo      aux = raiz;
            Nodo      aux2;
            Cerradura nueva = new Cerradura(contadorEstados);

            foreach (int i in m.getEstados())
            {
                aux2 = findNode(aux, i);
                encontrados.Add(aux2);
                desVisitarTodo(aux2);
                nueva.setEstados(transicionesEpsilon(encontrados, aux2));
                desVisitarTodo(aux2);
                nueva.ordenarEstados();
                if (nueva.getEstados().Contains(lastNode))
                {
                    nueva.setEstadoFinal();
                }
                desVisitarTodo(raiz);
            }

            for (int j = 0; j < cerraduras.Count; j++)
            {
                if (cerraduras.ElementAt(j).getEstados().Count == nueva.getEstados().Count)
                {
                    bool iguales = true;
                    foreach (Nodo n in cerraduras.ElementAt(j).getEstados())
                    {
                        if (!nueva.getEstados().Contains(n))
                        {
                            iguales = false;
                            break;
                        }
                    }
                    if (iguales)
                    {
                        contadorEstados--;
                        return(cerraduras.ElementAt(j));
                    }
                }
            }

            return(nueva);
        }