/** DFS-based topological sort. A valid sort is the reverse of * the post-order DFA traversal. Amazingly simple but true. * For sorting, I'm not following convention here since ANTLR * needs the opposite. Here's what I assume for sorting: * * If there exists an edge u → v then u depends on v and v * must happen before u. * * So if this gives nonreversed postorder traversal, I get the order * I want. */ public List<T> sort() { Set<Node<T>> visited = new OrderedHashSet<Node<T>>(); ArrayList<T> sorted = new ArrayList<T>(); while ( visited.size() < nodes.size() ) { // pick any unvisited node, n Node<T> n = null; for (Node<T> tNode : nodes.values()) { n = tNode; if ( !visited.contains(n) ) break; } DFS(n, visited, sorted); } return sorted; }
/** DFS-based topological sort. A valid sort is the reverse of * the post-order DFA traversal. Amazingly simple but true. * For sorting, I'm not following convention here since ANTLR * needs the opposite. Here's what I assume for sorting: * * If there exists an edge u → v then u depends on v and v * must happen before u. * * So if this gives nonreversed postorder traversal, I get the order * I want. */ public List<T> sort() { Set<Node<T>> visited = new OrderedHashSet<Node<T>>(); ArrayList<T> sorted = new ArrayList<T>(); while ( visited.size() < nodes.size() ) { // pick any unvisited node, n Node<T> n = null; for (Node<T> tNode : nodes.values()) { n = tNode; if ( !visited.contains(n) ) break; } DFS(n, visited, sorted); } return sorted; }
/** DFS-based topological sort. A valid sort is the reverse of * the post-order DFA traversal. Amazingly simple but true. * For sorting, I'm not following convention here since ANTLR * needs the opposite. Here's what I assume for sorting: * * If there exists an edge u -> v then u depends on v and v * must happen before u. * * So if this gives nonreversed postorder traversal, I get the order * I want. */ public List<Object> sort() { Set<Node> visited = new OrderedHashSet<Node>(); ArrayList<Object> sorted = new ArrayList<Object>(); while ( visited.size() < nodes.size() ) { // pick any unvisited node, n Node n = null; for (Iterator it = nodes.values().iterator(); it.hasNext();) { n = (Node)it.next(); if ( !visited.contains(n) ) break; } DFS(n, visited, sorted); } return sorted; }
for (Iterator it = nondeterministicAlts.iterator(); it.hasNext();) { Integer altI = (Integer) it.next(); altToSetOfContextsMap.put(altI, new OrderedHashSet<SemanticContext>());
new HashMap<Integer, OrderedHashSet<SemanticContext>>(); for (Integer altI : nondeterministicAlts) { altToSetOfContextsMap.put(altI, new OrderedHashSet<SemanticContext>());
new HashMap<Integer, OrderedHashSet<SemanticContext>>(); for (Integer altI : nondeterministicAlts) { altToSetOfContextsMap.put(altI, new OrderedHashSet<SemanticContext>());
protected List<IntervalSet> makeEdgeSetsDisjoint(List<IntervalSet> edges) { OrderedHashSet<IntervalSet> disjointSets = new OrderedHashSet<IntervalSet>();
protected List<IntervalSet> makeEdgeSetsDisjoint(List<IntervalSet> edges) { OrderedHashSet<IntervalSet> disjointSets = new OrderedHashSet<IntervalSet>();
protected List<IntervalSet> makeEdgeSetsDisjoint(List<IntervalSet> edges) { OrderedHashSet<IntervalSet> disjointSets = new OrderedHashSet<IntervalSet>();
protected List<IntervalSet> makeEdgeSetsDisjoint(List<IntervalSet> edges) { OrderedHashSet<IntervalSet> disjointSets = new OrderedHashSet<IntervalSet>();
reachableLabels = new OrderedHashSet<Label>();
reachableLabels = new OrderedHashSet<Label>();
reachableLabels = new OrderedHashSet<Label>();
reachableLabels = new OrderedHashSet<Label>();