Exemplo n.º 1
0
        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);
        }