public void graph(string name) { string texto = "digraph " + name + " {\n"; texto += "\trankdir=LR;" + "\n"; texto += "\tgraph [label=\"" + name + "\", labelloc=t, fontsize=18]; \n"; texto += "\tnode [style = filled];"; foreach (Estado e in this.States) { texto += " " + e.Identifier; } texto += ";" + "\n"; texto += "\tnode [shape=circle];" + "\n"; texto += "\tnode [shape=point];inicio;\n" + " inicio -> "+ this.Initial.Identifier + " [label=\"inicio\"];" + "\n"; List <string> duplicados = new List <string>(); List <Estado> FiltroEstados = new List <Estado>(); List <Trancision> FiltroTancisiones = new List <Trancision>(); Trancision transicion = new Trancision(); foreach (Estado e in this.States) { Estado ee = e; List <Trancision> trancisiones = e.Transitions; foreach (Trancision t in trancisiones) { if (duplicados.Find(x => x.Equals(t.Begin.Identifier + " -> " + t.End.Identifier + " [label=\"" + t.Symbol.getEtiqueta() + "\"];")) == null) { transicion = t; FiltroTancisiones.Add(t); duplicados.Add(t.Begin.Identifier + " -> " + t.End.Identifier + " [label=\"" + t.Symbol.getEtiqueta() + "\"];"); texto += "\t" + t.Begin.Identifier + " -> " + t.End.Identifier + " [label=\"" + t.Symbol.getEtiqueta() + "\"];" + "\n"; } } //ee.Transitions = FiltroTancisiones; FiltroEstados.Add(ee); FiltroTancisiones = new List <Trancision>(); } texto += transicion.End.Identifier + "[shape=doublecircle]"; texto += "}"; // this.States = FiltroEstados; Graficar_AFN niu = new Graficar_AFN(); niu.graficar(texto, name); }
public Automata afnSimple(Lista_ER simboloRegex) { Automata automataFN = new Automata(); Estado begin = new Estado(0); Estado aceptacion = new Estado(1); Trancision transition = new Trancision(begin, aceptacion, simboloRegex); begin.Transitions.Add(transition); automataFN.States.Add(begin); automataFN.States.Add(aceptacion); automataFN.Initial = begin; automataFN.Acceptance.Add(aceptacion); automataFN.Lenguage_R = simboloRegex.getEtiqueta() + ""; i++; return(automataFN); }