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(); } }
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); }