private void FindEclose(DFAGraphNode <string> node, ref NFAGraphNode <string> rtrn)
        {
            Console.WriteLine(node.Name);


            if (!komar.Contains(node))
            {
                komar.Add(node);

                bool flagerror = false;

                for (int i = 0; i < rtrn.GetEntering().Count; i++)
                {
                    if (node.Name == rtrn.GetEntering()[i].Name)
                    {
                        flagerror = true;
                    }
                }

                if (!flagerror)
                {
                    rtrn.AddEntering(node);
                }


                for (int i = 0; i < node.ConversionTable.Count; i++)
                {
                    if (node.ConversionTable[i].InputCharacter == "ε")
                    {
                        FindEclose(node.ConversionTable[i].StateSet, ref rtrn);
                    }
                }
            }
        }
        private void FindESigma(DFAGraphNode <string> node, string sigma, ref NFAGraphNode <string> rtrn)
        {
            komar.Clear();

            for (int i = 0; i < node.ConversionTable.Count; i++)
            {
                if (node.ConversionTable[i].InputCharacter == sigma)
                {
                    FindEclose(node.ConversionTable[i].StateSet, ref rtrn);
                }
            }
        }
        private void ENFAtoDFA(Automaton automaton)
        {
            Automaton DFAdef = new Automaton(automaton.InputCharacters);
            // automatonGraph = automaton;
            Queue <NFAGraphNode <string> > queue = new Queue <NFAGraphNode <string> >();
            List <string> list = new List <string>();

            List <string> newInpetCh = new List <string>();



            NFAGraphNode <string> topnode = new NFAGraphNode <string>(true);

            komar.Clear();
            FindEclose(automaton.head, ref topnode);
            topnode.GetNewNode();

            queue.Enqueue(topnode);

            DFAdef.addState(topnode.GetDFANode());



            while (queue.Count > 0)
            {
                NFAGraphNode <string> nodeTemp = queue.Dequeue();

                if (!list.Contains(nodeTemp.Name))
                {
                    List <StateTransitionTable> _conversionTable = new List <StateTransitionTable>();

                    for (int i = 1; i < automaton.InputCharacters.Count; i++)
                    {
                        NFAGraphNode <string> node = new NFAGraphNode <string>();

                        Console.WriteLine(automaton.InputCharacters[i]);


                        for (int j = 0; j < nodeTemp.GetEntering().Count; j++)
                        {
                            FindESigma(nodeTemp.GetEntering()[j], automaton.InputCharacters[i], ref node);
                        }
                        if (node.GetEntering().Count > 0)
                        {
                            node.GetNewNode();
                            DFAGraphNode <string> dfaNode = node.GetDFANode();

                            if (DFAdef.findByName(dfaNode.Name) == null)
                            {
                                DFAdef.addState(dfaNode);
                                _conversionTable.Add(new StateTransitionTable(dfaNode, automaton.InputCharacters[i], true));
                            }
                            else
                            {
                                _conversionTable.Add(new StateTransitionTable(DFAdef.findByName(dfaNode.Name), automaton.InputCharacters[i], true));
                            }
                            queue.Enqueue(node);
                        }
                    }

                    list.Add(nodeTemp.Name);
                    DFAdef.findByName(nodeTemp.Name).ConversionTable = _conversionTable;
                }
            }

            int a = 6;

            automatonGraph = DFAdef;

            automatonGraph.findHead();
            OutputToCanvas();
        }