Beispiel #1
0
        public void Generar()
        {
            if (verificarConjuntos())
            {
                Inicializar();
                for (int i = 0; i < vExpReg.Count; i++)
                {
                    actual = vExpReg[i];
                    if (actual.Count > 1)
                    {
                        Automata n1 = new Automata();
                        Automata n2 = new Automata();
                        Automata n3 = new Automata();
                        Automata n4 = new Automata();

                        k     = 2;
                        index = 1;
                        n1.setN(0);
                        n1.setT1(actual[0]);
                        n1.setS1(n2);
                        n2.setT1("ε");
                        n2.setN(1);
                        n2.setS1(Insertar(n3, n4));
                        n4.setN(k);
                        OperacionCerradura.Add(n1);
                    }
                }
                string dir = g.dir;
                for (int i = 0; i < OperacionCerradura.Count; i++)
                {
                    ultimo = getUltimo(OperacionCerradura[i].getS1());

                    visitados = new List <int>();
                    codigo    = "digraph AFN{\nrankdir=LR;\n";
                    codigo   += "labelloc=t;\nlabel=\"" + OperacionCerradura[i].getT1() + "\";\n";
                    AFN(OperacionCerradura[i].getS1());
                    g.Grafica(codigo + "}", OperacionCerradura[i].getT1() + "_AFN");
                    pathAFN.Add(@dir + "\\G_" + OperacionCerradura[i].getT1() + "_AFN");

                    codigo  = "digraph Cerradura{\n";
                    codigo += "labelloc=t;\nlabel=\"" + OperacionCerradura[i].getT1() + "\";\n";
                    codigo += "node [shape=plaintext];\n";
                    codigo += "tabla [label=<<table>\n";
                    Tabla_Cerradura_2(OperacionCerradura[i].getS1());
                    codigo += "</table>>];\n}";
                    g.Grafica(codigo, OperacionCerradura[i].getT1() + "_Cerradura");
                    pathCerradura.Add(@dir + "\\G_" + OperacionCerradura[i].getT1() + "_Cerradura");

                    codigo  = "digraph Siguientes{\n";
                    codigo += "labelloc=t;\nlabel=\"" + OperacionCerradura[i].getT1() + "\";\n";
                    codigo += "node [shape=plaintext];\n";
                    codigo += "tabla [label=<<table>\n";
                    Tabla_Siguientes();
                    codigo += "</table>>];\n}";
                    g.Grafica(codigo, OperacionCerradura[i].getT1() + "_Siguientes");
                    pathSiguientes.Add(@dir + "\\G_" + OperacionCerradura[i].getT1() + "_Siguientes");

                    codigo       = "digraph AFD{\nrankdir=LR;\n";
                    codigo      += "labelloc=t;\nlabel=\"" + OperacionCerradura[i].getT1() + "\";\n";
                    nlAFD        = new AFD_Lista();
                    nlAFD.titulo = OperacionCerradura[i].getT1();
                    AFD();
                    AFD_Lista.Add(nlAFD);
                    g.Grafica(codigo + "}", OperacionCerradura[i].getT1() + "_AFD");
                    pathAFD.Add(@dir + "\\G_" + OperacionCerradura[i].getT1() + "_AFD");
                }
                gramatica();
            }
        }
Beispiel #2
0
        private Automata Insertar(Automata ini, Automata fin)
        {
            if (actual[index] == ".")
            {
                Automata A   = new Automata();
                Automata B   = new Automata();
                Automata epA = new Automata();
                ini.setN(k);
                ini.setT1("ε");
                index++;
                k++;

                ini.setS1(Insertar(A, epA));
                epA.setT1("ε");
                epA.setN(k);
                k++;

                epA.setS1(Insertar(B, fin));
            }
            else if (actual[index] == "|")
            {
                Automata A   = new Automata();
                Automata B   = new Automata();
                Automata epA = new Automata();
                Automata epB = new Automata();
                ini.setN(k);
                ini.setT1("ε");
                ini.setT2("ε");
                index++;
                k++;

                ini.setS1(Insertar(A, epA));
                epA.setT1("ε");
                epA.setN(k);
                k++;
                ini.setS2(Insertar(B, epB));
                epB.setT1("ε");
                epB.setN(k);
                k++;

                epA.setS1(fin);
                epB.setS1(fin);
            }
            else if (actual[index] == "*")
            {
                Automata A   = new Automata();
                Automata epA = new Automata();
                ini.setN(k);
                ini.setT1("ε");
                ini.setT2("ε");
                index++;
                k++;

                ini.setS1(Insertar(A, epA));
                ini.setS2(epA);
                epA.setT1("ε");
                epA.setT2("ε");
                epA.setN(k);
                k++;

                epA.setS1(fin);
                epA.setS2(A);
            }
            else if (actual[index] == "+")
            {
                Automata A   = new Automata();
                Automata epA = new Automata();
                ini.setN(k);
                ini.setT1("ε");
                index++;
                k++;

                ini.setS1(Insertar(A, epA));
                epA.setT1("ε");
                epA.setT2("ε");
                epA.setN(k);
                k++;

                epA.setS1(fin);
                epA.setS2(A);
            }
            else if (actual[index] == "?")
            {
                Automata A   = new Automata();
                Automata epA = new Automata();
                ini.setN(k);
                ini.setT1("ε");
                ini.setT2("ε");
                index++;
                k++;

                ini.setS1(Insertar(A, epA));
                ini.setS2(epA);
                epA.setT1("ε");
                epA.setN(k);
                k++;

                epA.setS1(fin);
            }
            else if (actual[index].StartsWith("{"))
            {
                ini.setN(k);
                ini.setT1(actual[index] + "}");
                ini.setS1(fin);
                index++;
                k++;
            }
            else if (actual[index].StartsWith("["))
            {
                ini.setN(k);
                ini.setT1(actual[index]);
                ini.setS1(fin);
                index++;
                k++;
            }
            else if (actual[index].StartsWith("\\"))
            {
                ini.setN(k);
                ini.setT1("\\" + actual[index]);
                ini.setS1(fin);
                index++;
                k++;
            }
            else if (actual[index].Length > 2)
            {
                ini.setN(k);
                ini.setT1("\\" + actual[index] + "\\\"");
                ini.setS1(fin);
                index++;
                k++;
            }
            else
            {
                ini.setN(k);
                ini.setT1(actual[index]);
                ini.setS1(fin);
                index++;
                k++;
            }
            return(ini);
        }