}
if (zeroOkay) {
add(new Sequence.RewritingSequence(tag, new Element[] { }, null));
+ //add(new Sequence.Constant.Empty());
// FUGLY
add(new Sequence.Singleton(Sequence.many1(e, separator, tag)));
} else {
if (zeroOkay && separator != null)
throw new RuntimeException("cannot create a maximal repetition of zero or more items with a separator (yet): " + this);
for(Sequence s : this)
- s.follow = new Invert(separator);
+ s.follow = (Atom)separator.complement();
}
public Maximal(final Atom e, boolean zeroOkay, boolean manyOkay, Object tag) {
super(e, zeroOkay, manyOkay, null, true, tag);
for(Sequence s : this)
- s.follow = new Invert(e);
+ s.follow = (Atom)e.complement();
}
}
-
- /** an atom which tracks the inverse of some other atom */
- private static class Invert<T extends Input> extends Atom<T> {
- private final Atom<T> a;
- public Invert(Atom<T> a) { this.a = a; }
- public Topology<T> top() { return a.complement(); }
- public String toString() { return "~"+a; }
- }
}