private void SetInicialSetSplitting()
        {
            NODES_SET notEndDFANodes = NODES_SET.CreateNodesSet();
            NODES_SET endDFANodes    = NODES_SET.CreateNodesSet();

            if (DFANodes.Count != 0)
            {
                foreach (NODE node in DFANodes)
                {
                    if (node.nodeType == NODE_TYPE.END)
                    {
                        endDFANodes.nodesSet.Add(node);
                        node.assignedSet = endDFANodes;
                    }
                    else
                    {
                        notEndDFANodes.nodesSet.Add(node);
                        node.assignedSet = notEndDFANodes;
                    }
                    node.edges.OrderBy(edge => edge.transitionCharacter);
                }
                DFASets.Add(notEndDFANodes);
                DFASets.Add(endDFANodes);
            }
        }
示例#2
0
        private bool Perform_SetSplitting(NODES_SET set, List <NODES_SET> newNodeSets)
        {
            bool           existedChange = false;
            HashSet <NODE> nodesToDelete = new HashSet <NODE>();

            if (set.nodesSet.Count > 1)
            {
                foreach (NODE nodesSet_it in set.nodesSet)
                {
                    if (nodesSet_it != set.nodesSet.First())
                    {
                        if (!AreNodesEquivalent(set.nodesSet.First(), nodesSet_it))
                        {
                            existedChange = true;

                            if (!IsNodeEquivalentToASet(nodesSet_it, newNodeSets))
                            {
                                NODES_SET newSet = NODES_SET.CreateNodesSet();
                                nodesSet_it.assignedSet = newSet;
                                newSet.nodesSet.Add(nodesSet_it);
                                newNodeSets.Add(newSet);
                            }

                            nodesToDelete.Add(nodesSet_it);
                        }
                    }
                }

                foreach (NODE nodeToDelete in nodesToDelete)
                {
                    set.nodesSet.Remove(nodeToDelete);
                }
            }
            return(existedChange);
        }
示例#3
0
        public DFA_GRAPH(E_CLOSURE_GRAPH eClosureGraph)
        {
            if (eClosureGraph != null)
            {
                DFASets  = new List <NODES_SET>();
                DFANodes = new List <NODE>();

                Get_DFAGraphFromEClosureGraph(eClosureGraph);
                Perform_DFAMinimization();
            }
            NODE.ClearCount();
            NODES_SET.ClearCount();
        }