projects
/
sbp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
remove edu.berkeley.sbp.bind
[sbp.git]
/
src
/
edu
/
berkeley
/
sbp
/
Forest.java
diff --git
a/src/edu/berkeley/sbp/Forest.java
b/src/edu/berkeley/sbp/Forest.java
index
43ffb10
..
b2f4a22
100644
(file)
--- a/
src/edu/berkeley/sbp/Forest.java
+++ b/
src/edu/berkeley/sbp/Forest.java
@@
-1,3
+1,5
@@
+// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
+
package edu.berkeley.sbp;
import edu.berkeley.sbp.*;
import edu.berkeley.sbp.Sequence.Position;
package edu.berkeley.sbp;
import edu.berkeley.sbp.*;
import edu.berkeley.sbp.Sequence.Position;
@@
-127,7
+129,6
@@
public abstract class Forest<NodeType> implements GraphViz.ToGraphViz {
/** An "ambiguity node"; this is immutable once it has been "looked at" */
static class Many<NodeType> extends Forest<NodeType> {
/** An "ambiguity node"; this is immutable once it has been "looked at" */
static class Many<NodeType> extends Forest<NodeType> {
- HashSet<GSS.Phase.Node> parents = new HashSet<GSS.Phase.Node>();
private FastSet<Forest<NodeType>> hp = new FastSet<Forest<NodeType>>();
private boolean touched = false;
private FastSet<Forest<NodeType>> hp = new FastSet<Forest<NodeType>>();
private boolean touched = false;
@@
-156,6
+157,14
@@
public abstract class Forest<NodeType> implements GraphViz.ToGraphViz {
void gather(HashSet<Forest<NodeType>> ht) {
touched();
void gather(HashSet<Forest<NodeType>> ht) {
touched();
+
+ // FIXME: do something more sensible here
+ if (ht.contains(this)) {
+ System.err.println("WARNING: grammar produced a circular forest\n" + this);
+ //throw new Error("grammar produced a circular forest:\n" + this);
+ return;
+ }
+
ht.add(this);
for(Forest<NodeType> f : hp) f.gather(ht);
}
ht.add(this);
for(Forest<NodeType> f : hp) f.gather(ht);
}