Exemplo n.º 1
0
        public void obtenerTerminales()
        {
            //transicion t = new transicion(""+this.inicio.getId(), this.inicio);
            transicion t = new transicion("" + contadorEstados, this.inicio);

            contadorEstados++;
            transiciones.Add(t);

            obT(this.inicio);


            terminales = terminales.OrderBy(o => o.getValorTransicion()).ToList();

            Console.WriteLine("recorrido");
            foreach (nodoThompson n in terminales)
            {
                Console.WriteLine(n.getValorTransicion());
            }



            foreach (transicion tran in transiciones)
            {
                noCerradura = new List <int>();

                transicionActual = tran;
                obtenerCerradura(tran.getNodo());

                /*Console.WriteLine("Transiciones");
                 * /***************************
                 * Console.WriteLine(tran.getNodo().getId());
                 * /***************************/

                /* Console.WriteLine("nodos que alcanza");
                 * foreach (int i in transicionActual.getNodosAlcanza())
                 * {
                 *   Console.WriteLine(i);
                 * }
                 *
                 * Console.WriteLine("terminales que alcanza");
                 * foreach (nodoThompson j in transicionActual.getTerminalesAlcanza())
                 * {
                 *   Console.WriteLine(j.getValorTransicion() + " " + j.getArriba().getId());
                 * }*/
            }

            foreach (transicion tran in transiciones)
            {
                bool control = true;

                foreach (nodoThompson k in noAgregar)
                {
                    if (tran.getNodo() == k)
                    {
                        control = false;
                    }
                }

                if (control == true)
                {
                    nuevasTransiciones.Add(tran);
                    foreach (transicion tranTemporal in transiciones)
                    {
                        if (!(tranTemporal == tran))
                        {
                            List <int> nodosQueAlcanzaActual   = tran.getNodosAlcanza();
                            List <int> nodosQueAlcanzaTemporal = tranTemporal.getNodosAlcanza();

                            List <int> diferencias = nodosQueAlcanzaActual.Except(nodosQueAlcanzaTemporal).ToList();

                            List <int> diferencias1 = nodosQueAlcanzaTemporal.Except(nodosQueAlcanzaActual).ToList();

                            foreach (int nuevosDif in diferencias1)
                            {
                                diferencias.Add(nuevosDif);
                            }

                            if ((diferencias.FirstOrDefault() == 0))
                            {
                                Console.WriteLine("No se agrega: " + tranTemporal.getNombre());
                                noAgregar.Add(tranTemporal.getNodo());
                            }
                        }
                    }
                }
            }


            Console.WriteLine("nuevasTransiciones");
            foreach (transicion l in nuevasTransiciones)
            {
                Console.WriteLine(l.getNombre());
            }
        }
Exemplo n.º 2
0
        void obT(nodoThompson n)
        {
            if (n.getArriba() != null)
            {
                bool control = true;

                foreach (int j in no)
                {
                    if (n.getId() == j)
                    {
                        control = false;
                    }
                }
                if (control == true)
                {
                    if (n.getAbajo() == null)
                    {
                        no.Add(n.getId());
                    }

                    if (!n.getValorTransicion().Equals("ε"))
                    {
                        transicion sig = new transicion("" + contadorEstados, n.getArriba());
                        contadorEstados++;
                        transiciones.Add(sig);


                        bool ctrl = true;

                        foreach (nodoThompson term in terminales)
                        {
                            if (term == n)
                            {
                            }
                            else
                            {
                                if (n.getValorTransicion().Equals(term.getValorTransicion()))
                                {
                                    ctrl = false;
                                }
                            }
                        }
                        if (ctrl == true)
                        {
                            terminales.Add(n);
                        }
                    }
                    obT(n.getArriba());
                }
            }
            if (n.getAbajo() != null)
            {
                bool control = true;

                foreach (int j in no)
                {
                    if (n.getId() == j)
                    {
                        control = false;
                    }
                }
                if (control == true)
                {
                    if (n.getAbajo() == null)
                    {
                        no.Add(n.getId());
                    }
                    if (!n.getValorTransicion().Equals("ε"))
                    {
                        transicion sig = new transicion("" + contadorEstados, n.getArriba());

                        transiciones.Add(sig);

                        bool ctrl = true;
                        foreach (nodoThompson term in terminales)
                        {
                            if (term == n)
                            {
                            }
                            else
                            {
                                if (n.getValorTransicion().Equals(term.getValorTransicion()))
                                {
                                    ctrl = false;
                                }
                            }
                        }
                        if (ctrl == true)
                        {
                            terminales.Add(n);
                        }
                    }
                    obT(n.getAbajo());
                }
            }
        }