this.firstp = new Position(this, 0, null);
}
- abstract Forest epsilonForm(Input.Region loc, Grammar cache);
+ abstract Forest epsilonForm(Input.Region loc);
- protected abstract <T> Forest<T> postReduce(Input.Region loc, Forest<T>[] args, Pos p);
+ protected abstract <T> Forest<T> postReduce(Input.Region loc, Forest<T>[] args, Position p);
// Position //////////////////////////////////////////////////////////////////////////////
abstract Element element();
public abstract int numPops();
- public abstract <T> Forest<T> rewrite(Input.Region loc, Grammar cache);
+ public abstract <T> Forest<T> rewrite(Input.Region loc);
}
/** the imaginary position before or after an element of a sequence; corresponds to an "LR item" */
public int[] hates();
public boolean owner_needed_or_hated();
public int numPops();
- public <T> Forest<T> rewrite(Input.Region loc, Grammar cache)
+ public <T> Forest<T> rewrite(Input.Region loc)
};
}
*/
- public int ord = -1;
- public int ord() { return ord; }
public int numPops() { return pos; }
final int pos;
// Position /////////////////////////////////////////////////////////////////////////////////
- public final <T> Forest<T> rewrite(Input.Region loc, Grammar cache) {
- if (this==firstp()) epsilonForm(loc, cache);
+ public final <T> Forest<T> rewrite(Input.Region loc) {
+ if (isFirst()) owner().epsilonForm(loc);
for(int i=0; i<pos; i++) if (holder[i]==null) throw new Error("realbad " + i);
- for(int i=pos; i<elements.length; i++) {
- if (holder[i]==null) holder[i] = ((Union)elements[i]).epsilonForm(loc, cache);
+ for(int i=pos; i<owner().elements.length; i++) {
+ if (holder[i]==null) holder[i] = ((Union)owner().elements[i]).epsilonForm(loc);
if (holder[i]==null) throw new Error("bad");
}
- return Sequence.this.postReduce(loc, holder, this);
+ return owner().postReduce(loc, holder, this);
}
public String toString() {
return sb;
}
-
// Specialized Subclasses //////////////////////////////////////////////////////////////////////////////
static class Singleton extends Sequence {
public Singleton(Element[] e, int idx) { super(e); this.idx = idx; }
public <T> Forest<T> postReduce(Input.Region loc, Forest<T>[] args, Position p) { return args[idx]; }
Sequence _clone() { return new Singleton(elements,idx); }
- Forest epsilonForm(Input.Region loc, Grammar cache) {
- return ((Union)elements[idx]).epsilonForm(loc, cache);
+ Forest epsilonForm(Input.Region loc) {
+ return ((Union)elements[idx]).epsilonForm(loc);
}
}
if (spacing) for(int i=0; i<50-len; i++) sb.append(' ');
return sb;
}
- Forest epsilonForm(Input.Region loc, Grammar cache) {
+ Forest epsilonForm(Input.Region loc) {
return Forest.create(loc, tag, new Forest[0], lifts);
}
}