public void GraficarAFD() { String nombre = name + "_AFD"; String grafica = "digraph " + nombre + " {\n overlap=false;\nrankdir=\u0022LR\u0022;\n"; for (int i = 0; i < transiciones.Count; i++) { if (transiciones.ElementAt(i).Aceptacion == true) { grafica += "node" + transiciones.ElementAt(i).EstadoInicial + " [shape = doublecircle, height=.1 label=\u0022" + transiciones.ElementAt(i).EstadoInicial + "\u0022]; \n"; } else { grafica += "node" + transiciones.ElementAt(i).EstadoInicial + " [shape = circle, height=.1 label=\u0022" + transiciones.ElementAt(i).EstadoInicial + "\u0022]; \n"; } } for (int i = 0; i < transiciones.Count; i++) { int id = transiciones.ElementAt(i).EstadoInicial; if (transiciones.ElementAt(i).Transiciones != null) { for (int l = 0; l < transiciones.ElementAt(i).Transiciones.Count; l++) { grafica += "node" + id + " -> node" + transiciones.ElementAt(i).Transiciones.ElementAt(l).Estado + " [label=\u0022" + transiciones.ElementAt(i).Transiciones.ElementAt(l).Simbolo.Replace('"', ' ').Trim() + "\u0022]; \n"; } } } grafica += "}"; Graficador gr = new Graficador(); gr.graficar(grafica, nombre); }
public void separarNodos(List <Expresion> listaExpresiones, ListaCircularGaleria lg) { for (int h = 0; h < listaExpresiones.Count; h++) { String expresion = listaExpresiones.ElementAt(h).ExpresionRegular; String nombreGrafica = listaExpresiones.ElementAt(h).Identificador; int estado = 0; string lexema = ""; Char c; grafica += "digraph " + nombreGrafica + " { \n"; grafica += "rankdir = \u0022LR\u0022; \n"; grafica += "node [shape = circle, height=.1]; \n"; expresion = expresion + " "; for (int i = 0; i < expresion.Length; i++) { c = expresion[i]; switch (estado) { case 0: if (c == '|') { nodos.Add(c); } else if (c == '.') { nodos.Add(c); } else if (c == '+') { nodos.Add(c); } else if (c == '*') { nodos.Add(c); } else if (c == '?') { nodos.Add(c); } else if (c == '{') { estado = 1; } else if (c == '\u0022') { lexema += c; estado = 2; } break; case 1: if (c == '}') { nodos.Add(lexema); lexema = ""; estado = 0; } else { lexema += c; } break; case 2: if (c == '\u0022') { lexema += c; nodos.Add(lexema); lexema = ""; estado = 0; } else { lexema += c; } break; } } j = 0; Object nodo = nodos.ElementAt(j); NodoExpresion nuevo = new NodoExpresion(); nuevo.Id = j; listaNodos.Add(nuevo); generarAFN(nodo, 0, nuevo); raiz = nuevo; grafica += "}"; Graficador gr = new Graficador(); gr.graficar(grafica, nombreGrafica); MetodoSubconjuntos ms = new MetodoSubconjuntos(); List <int> numeros = new List <int>(); numeros.Add(0); Galeria nuevoGaleria = new Galeria(); nuevoGaleria.Nombre = nombreGrafica; nuevoGaleria.Simbolos = simbolos; ms.generarTabla(listaNodos, numeros, simbolos, nombreGrafica, ultimo, lg, nuevoGaleria); ms.GraficarAFD(); nodos = new List <object>(); listaNodos = new List <NodoExpresion>(); simbolos = new List <object>(); j = 0; k = 0; grafica = ""; } }