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); } }
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); }
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(); }