Пример #1
0
        public Automaton or(Automaton left, Automaton right)
        {
            Automaton afn = new Automaton();


            Estado actual_begin = new Estado(0);

            actual_begin.setTransitions(new Transition(actual_begin, right.getBegin(), Automaton.EPSILON));

            afn.addEstados(actual_begin);
            afn.setBegin(actual_begin);
            int i = 0;

            for (i = 0; i < left.getEstados().Count(); i++)
            {
                Estado aux = left.getEstados().ElementAt(i);
                aux.setId(i + 1);
                afn.addEstados(aux);
            }

            for (int j = 0; j < right.getEstados().Count(); j++)
            {
                Estado aux = right.getEstados().ElementAt(j);
                aux.setId(i + 1);
                afn.addEstados(aux);
                i++;
            }

            Estado actual_end = new Estado(left.getEstados().Count() + right.getEstados().Count() + 1);

            afn.addEstados(actual_end);
            afn.addEstadosAceptacion(actual_end);


            Estado last_begin = left.getBegin();
            LinkedList <Estado> last_end_left  = left.getEstadosAceptacion();
            LinkedList <Estado> last_end_right = right.getEstadosAceptacion();

            actual_begin.getTransitions().AddLast(new Transition(actual_begin, last_begin, Automaton.EPSILON));


            for (int k = 0; k < last_end_left.Count(); k++)
            {
                last_end_left.ElementAt(k).getTransitions().AddLast(new Transition(last_end_left.ElementAt(k), actual_end, Automaton.EPSILON));
            }

            for (int k = 0; k < last_end_left.Count(); k++)
            {
                last_end_right.ElementAt(k).getTransitions().AddLast(new Transition(last_end_right.ElementAt(k), actual_end, Automaton.EPSILON));
            }

            return(afn);
        }
Пример #2
0
        public Automaton cerradura_kleene(Automaton afn)
        {
            //Definir un nuevo automata con su estado inicial
            Automaton kleene = new Automaton();

            /*Se marca el estado inicial como "actual" debido a  que el automata recibido por parametro tambien
             * posee sus estados inicial y final
             */
            Estado actual_begin = new Estado(0);

            kleene.addEstados(actual_begin);
            kleene.setBegin(actual_begin);


            //Actualizar los indicadores de estado del afn recibido
            for (int i = 0; i < afn.getEstados().Count(); i++)
            {
                Estado aux = afn.getEstados().ElementAt(i);
                for (int j = 0; j < aux.getTransitions().Count(); j++)
                {
                    aux.getTransitions().ElementAt(j).getBegin().setId(aux.getTransitions().ElementAt(j).getBegin().getId() + 1);
                }
                aux.setId(i + 1);
                kleene.addEstados(aux);
            }



            Estado actual_end = new Estado(afn.getEstados().Count() + 1);

            kleene.addEstados(actual_end);
            kleene.addEstadosAceptacion(actual_end);

            Estado last_begin = afn.getBegin();

            LinkedList <Estado> last_end = afn.getEstadosAceptacion();

            actual_begin.getTransitions().AddLast(new Transition(actual_begin, last_begin, Automaton.EPSILON));
            actual_begin.getTransitions().AddLast(new Transition(actual_begin, actual_end, Automaton.EPSILON));


            for (int i = 0; i < last_end.Count(); i++)
            {
                last_end.ElementAt(i).getTransitions().AddLast(new Transition(last_end.ElementAt(i), last_begin, Automaton.EPSILON));
                last_end.ElementAt(i).getTransitions().AddLast(new Transition(last_end.ElementAt(i), actual_end, Automaton.EPSILON));
            }

            return(kleene);
        }
Пример #3
0
        public Automaton and(Automaton left, Automaton right)
        {
            Automaton afn = new Automaton();
            int       i   = 0;

            for (i = 0; i < right.getEstados().Count(); i++)
            {
                Estado aux = right.getEstados().ElementAt(i);
                aux.setId(i);

                if (i == 0)
                {
                    afn.setBegin(aux);
                }

                if (i == right.getEstados().Count() - 1)
                {
                    for (int j = 0; j < right.getEstadosAceptacion().Count(); j++)
                    {
                        //aux.setTransitions(new Transition((Estado)right.getEstadosAceptacion().ElementAt(j), left.getBegin(), Automaton.EPSILON));
                        foreach (Transition t in left.getBegin().getTransitions())
                        {
                            //t.setBegin(aux);
                            aux.setTransitions(new Transition((Estado)right.getEstadosAceptacion().ElementAt(j), t.getEnd(), t.getSimbol()));
                        }
                    }
                }
                afn.addEstados(aux);
            }


            for (int j = 1; j < left.getEstados().Count(); j++)
            {
                Estado aux = left.getEstados().ElementAt(j);
                aux.setId(i);

                if (j == left.getEstados().Count() - 1)
                {
                    afn.addEstadosAceptacion(aux);
                }
                afn.addEstados(aux);
                i++;
            }
            return(afn);
        }