public AutomataD createAutomata(string s)
        {
            InfixToPostfix ix  = new InfixToPostfix(s);
            ArbolSin       ar  = new ArbolSin(s);
            Converter      con = new Converter();

            return(con.DirectAFD(ar));
        }
Beispiel #2
0
        public AutomataD DirectAFD(ArbolSin a)
        {
            DStates     d    = new DStates();
            List <Nodo> temp = new List <Nodo>();
            EstadoD     e;
            AutomataD   b = new AutomataD();

            d.Add(new EstadoD(a.getRaiz().getFPos()));
            b.setInicio(d[0]);
            b.setAlfa(a.getAlfa());
            d.setNMarcado();

            while (d.getNMarcado() != null)
            {
                d.marcar();
                b.addContEstados(d.getNMarcado());
                foreach (var i in b.getAlfa())
                {
                    temp = a.getFollowPos(d.getNMarcado().getNodosD(), i);
                    e    = new EstadoD(temp);
                    if (!d.contieneN(e))
                    {
                        d.Add(e);
                        if (e.cotieneN(a.getFin()))
                        {
                            b.addFin(e);
                        }
                        d.getNMarcado().agregarTransicion(e, i);
                    }
                    else
                    {
                        d.getNMarcado().agregarTransicion(d.Find(t => t.getNodosD().All(e.getNodosD().Contains) && e.getNodosD().All(t.getNodosD().Contains)), i);
                    }
                }
                d.setNMarcado();
            }

            return(b);
        }