projects
/
sbp.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e028701
)
checkpoint
author
adam
<adam@megacz.com>
Sun, 22 Jan 2006 10:04:15 +0000
(
05:04
-0500)
committer
adam
<adam@megacz.com>
Sun, 22 Jan 2006 10:04:15 +0000
(
05:04
-0500)
darcs-hash:
20060122100415
-5007d-
71510aea2e762fc082b3acf09efc30356d2d3f98
.gz
src/edu/berkeley/sbp/Forest.java
patch
|
blob
|
history
diff --git
a/src/edu/berkeley/sbp/Forest.java
b/src/edu/berkeley/sbp/Forest.java
index
7b11532
..
d7716dd
100644
(file)
--- a/
src/edu/berkeley/sbp/Forest.java
+++ b/
src/edu/berkeley/sbp/Forest.java
@@
-20,9
+20,9
@@
public abstract class Forest<T> /*extends PrintableTree<Forest.MyBody<T>>*/ impl
public HashSet<Tree<T>> expand(boolean toss) {
final HashSet<Tree<T>> hs = new HashSet<Tree<T>>();
TreeMaker<T> ret = new TreeMaker<T>(toss) {
public HashSet<Tree<T>> expand(boolean toss) {
final HashSet<Tree<T>> hs = new HashSet<Tree<T>>();
TreeMaker<T> ret = new TreeMaker<T>(toss) {
- public void add(Input.Location loc) {
- hs.add(new Tree<T>(loc, head, toks.toArray(tree_hint)));
- }
+ public void start(T head, Input.Location loc) { }
+ public void finish(T head, Input.Location loc) { hs.add(new Tree<T>(loc, head, toks.toArray(tree_hint))); }
+ public void child(Tree<T> t) { toks.add(t); }
};
visit(ret, null, null);
if (toss && hs.size() > 1) throw new Ambiguous(this);
};
visit(ret, null, null);
if (toss && hs.size() > 1) throw new Ambiguous(this);
@@
-69,9
+69,10
@@
public abstract class Forest<T> /*extends PrintableTree<Forest.MyBody<T>>*/ impl
tokens[0].visit(h, null, i);
return h;
}
tokens[0].visit(h, null, i);
return h;
}
- if (i==0) h.head(tag);
+ if (i==0) h.start(tag, location);
+
if (i==tokens.length) {
if (i==tokens.length) {
- h.add(/*FIXME*/null);
+ h.finish(tag, location);
} else if (unwrap && i==tokens.length-1) {
if (tokens[i] != null)
} else if (unwrap && i==tokens.length-1) {
if (tokens[i] != null)
@@
-79,9
+80,11
@@
public abstract class Forest<T> /*extends PrintableTree<Forest.MyBody<T>>*/ impl
} else {
tokens[i].visit(new TreeMaker<T>(h.toss) {
} else {
tokens[i].visit(new TreeMaker<T>(h.toss) {
- public void add(Input.Location loc) {
+ public void start(T head, Input.Location loc) { }
+ public void child(Tree<T> t) { toks.add(t); }
+ public void finish(T head, Input.Location loc) {
int old = h.toks.size();
int old = h.toks.size();
- h.toks.add(new Tree<T>(loc, head, toks.toArray(tree_hint)));
+ h.child(new Tree<T>(loc, head, toks.toArray(tree_hint)));
expand(i+1, h);
while(h.toks.size() > old) h.toks.remove(h.toks.size()-1);
}
expand(i+1, h);
while(h.toks.size() > old) h.toks.remove(h.toks.size()-1);
}
@@
-123,8
+126,9
@@
public abstract class Forest<T> /*extends PrintableTree<Forest.MyBody<T>>*/ impl
private boolean toss;
protected T head;
public TreeMaker(boolean toss) { this.toss = toss; }
private boolean toss;
protected T head;
public TreeMaker(boolean toss) { this.toss = toss; }
- public void head(T head) { this.head = head; }
- public abstract void add(Input.Location loc);
+ public abstract void start(T head, Input.Location loc);
+ public abstract void finish(T head, Input.Location loc);
+ public abstract void child(Tree<T> t);
public void invoke(Forest.Body<T> bod, Boolean o, Integer i) {
if (i==null) {
ArrayList<Tree<T>> toks = this.toks;
public void invoke(Forest.Body<T> bod, Boolean o, Integer i) {
if (i==null) {
ArrayList<Tree<T>> toks = this.toks;