Exemplo n.º 1
0
        public void createBasicAFN(int arg1, LinkedList <Estado> Estados)
        {
            Transicion TempTransicion = new Transicion();

            EstadoInicial.setID(Estado.Contador++);
            EstadoFinal.setID(Estado.Contador++);
            TempTransicion.setIDTerminal(arg1);
            TempTransicion.setDestino(EstadoFinal);
            EstadoInicial.addTransicion(TempTransicion);
            Estados.AddLast(EstadoInicial);
            Estados.AddLast(EstadoFinal);
        }
Exemplo n.º 2
0
        public void createConcatenacionAFN(AFN AFN1, AFN AFN2, LinkedList <Estado> Estados)
        {
            EstadoInicial = AFN1.getEstadoInicial();
            EstadoFinal   = AFN2.getEstadoFinal();

            //SE COMBINAN ESTADO FINAL DE AFN1 CON ESTADO INICIAL DE AFN2
            Estado TempEstado = new Estado();

            TempEstado.setID(Estado.Contador++);
            //TRANSICIONES ENTRANTES
            foreach (Estado AuxEstado in Estados)
            {
                foreach (Transicion TempTransicion in AuxEstado.getTransiciones())
                {
                    if (TempTransicion.getDestino() == AFN1.getEstadoFinal() || TempTransicion.getDestino() == AFN2.getEstadoInicial())
                    {
                        TempTransicion.setDestino(TempEstado);
                    }
                }
            }
            //TRANSICIONES SALIENTES
            foreach (Transicion TempTransicion in AFN1.getEstadoFinal().getTransiciones())
            {
                TempEstado.addTransicion((Transicion)TempTransicion.Clone());
            }
            foreach (Transicion TempTransicion in AFN2.getEstadoInicial().getTransiciones())
            {
                TempEstado.addTransicion((Transicion)TempTransicion.Clone());
            }

            //SE AÑADE NUEVO ESTADO Y SE ELIMINAN LOS DOS USADOS PARA EL NUEVO ESTADO
            Estados.Remove(AFN1.getEstadoFinal());
            Estados.Remove(AFN2.getEstadoInicial());
            Estados.AddLast(TempEstado);
            AFN1.setEstadoFinal(TempEstado);
            AFN2.setEstadoInicial(TempEstado);
        }