private E_CLOSURE_NODE Perform_EClosureOperation(Stack <NODE> NFANodesStack, Dictionary <char, Stack <NODE> > moveToDictionary)
        {
            HashSet <NODE> visitedNodes     = new HashSet <NODE>();
            NODE           nodeUnderProcess = null;
            E_CLOSURE_NODE eClosureNode     = null;

            if (NFANodesStack.Count() != 0)
            {
                eClosureNode = E_CLOSURE_NODE.Create_Node(NODE_TYPE.TRANSITIONING);

                while (NFANodesStack.Count() != 0)
                {
                    nodeUnderProcess = NFANodesStack.Pop();

                    eClosureNode.NFANodes.Add(nodeUnderProcess);

                    if (nodeUnderProcess.nodeType == NODE_TYPE.END)
                    {
                        eClosureNode.nodeType = NODE_TYPE.END;
                    }

                    if (nodeUnderProcess.nodeType == NODE_TYPE.START)
                    {
                        eClosureNode.nodeType = NODE_TYPE.START;
                    }

                    foreach (EDGE edge in nodeUnderProcess.edges)
                    {
                        if (!visitedNodes.Contains(edge.nextNode))
                        {
                            visitedNodes.Add(edge.nextNode);

                            if (edge.transitionCharacter == CONSTANTS.EMPTY_SYMBOL)
                            {
                                NFANodesStack.Push(edge.nextNode);
                            }
                            else
                            {
                                if (!moveToDictionary.ContainsKey(edge.transitionCharacter))
                                {
                                    moveToDictionary.Add(edge.transitionCharacter, new Stack <NODE>());
                                }
                                moveToDictionary[edge.transitionCharacter].Push(edge.nextNode);
                            }
                        }
                    }
                }

                eClosureNode.NFANodes.OrderBy(NFANode => NFANode.NodeID);
            }

            return(eClosureNode);
        }