protected Sequence(Element[] elements, HashSet<Sequence> and, HashSet<Sequence> not) {
this.needs = and==null ? new HashSet<Sequence>() : and;
this.hates = not==null ? new HashSet<Sequence>() : not;
- //for(Sequence s : needs) s.lame = true;
- //for(Sequence s : hates) s.lame = true;
this.elements = elements;
this.firstp = new Position(0);
}
- void reachable(HashSet<Position> h) { firstp().reachable(h); }
-
Forest epsilonForm() { return firstp().rewrite(null); }
protected abstract <T> Forest<T> postReduce(Token.Location loc, Forest<T>[] args);
/** the imaginary position before or after an element of a sequence; corresponds to an "LR item" */
public class Position {
- void reachable(HashSet<Position> h) {
- if (h.contains(this)) return;
- h.add(this);
- if (element() != null) element().reachable(h);
- }
-
final int pos;
private final Position next;
final Forest[] holder;