Esempio n. 1
0
 public static NodeController getInstancia()
 {
     if (instancia == null)
     {
         instancia = new NodeController();
     }
     return(instancia);
 }
        public void Insert(String name, ArrayList ar, String path)
        {
            ArrayList vuelta = new ArrayList(); // array que va a almacenar los elementos en orden inverso

            for (int i = ar.Count - 1; i >= 0; i--)
            {
                vuelta.Add(ar[i]);
                NodeController.getInstancia().InsertStack(ar[i].ToString());
            }
            String ast = "";

            foreach (var item in vuelta)
            {
                ast = ast + " " + item;
            }

            Console.WriteLine(ast);

            RegularExpression re = new RegularExpression(name, vuelta);

            arrayListER.Add(re);
            NodeController.getInstancia().Print(name, path);



            //Convierte la expresion regular de prefija a pos
            ArrayList regularExpresion = NodeController.getInstancia().ConvertExpression(NodeController.getInstancia().getRoot());
            ArrayList regex            = new ArrayList();


            try
            {
                regex = RegexController.Instance.infixToPostfix(regularExpresion);
            }
            catch (Exception a)
            {
                Console.WriteLine("Expresión mal ingresada");
            }

            string st = "";

            foreach (var item in regularExpresion)
            {
                st = st + item;
            }

            Console.WriteLine(name + "->" + st);

            //CONSTRUYE EL AUTOMATA ANF
            AFN aFN = new AFN();

            aFN.construirAutomata(regex);
            Automata.Automata afn_result = aFN.Afn;
            ThompsonControlador.Instance.generarDOT("AFN", name, afn_result);
            InsertAutomataAFNName("AFN " + name);
            //CONSTRUYE EL AUTOMATA AFD
            AFD AFD = new AFD();

            AFD.conversionAFN(afn_result);
            Automata.Automata afd_result = AFD.Afd;

            //CONSTRUYE EL AUTOMATA SIN ESTADO STRAMPA
            Automata.Automata afd_trampa = AFD.RemoveCheatStates(afd_result);
            ThompsonControlador.Instance.generarDOT("AFD", name, afd_trampa);
            InsertAutomataAFDName("AFD " + name);



            //CONSTRUYE LA TABLA
            ThompsonControlador.Instance.TableConstructor(name, path, afd_trampa);
            InsertTablaName(name + "Table");
            //ENVIA EL AUTOMATA A SER GUARDADO PARA POSTERIOR EVALUACION
            EvaluatorController.Instance.Insert(name, afd_trampa);


            NodeController.getInstancia().clearList();
        }