public static Repeat many1(Element e) { return new Repeat(e, false, true); }
/** repeat one or more times, separated by <tt>sep</tt> */
public static Repeat many1(Element e, Element sep) { return new Repeat(e, false, true, sep); }
+
/** repeat zero or more times, matching a maximal sequence of atoms */
public static Repeat maximal0(Element e) { return new Repeat(e, true, true, null, true); }
/** repeat one or more times, matching a maximal sequence of atoms */
this.zeroOkay = zeroOkay;
this.manyOkay = manyOkay;
this.separator = separator;
- Union who = this;
- if (maximal) {
- who = new Union(this+"++");
- add(new Sequence.Singleton(who, null, null) {
- public Topology noFollow() { return separator==null ? e.toAtom() : separator.toAtom(); }
- });
- }
if (zeroOkay) {
- who.add(new Sequence.Constant.Empty());
- if (manyOkay) who.add(new Sequence.Singleton(many1(e, separator), null, null));
- else who.add(new Sequence.Singleton(e, null, null));
+ add(new Sequence.Constant.Empty());
+ if (manyOkay) add(new Sequence.Singleton(many1(e, separator), null, null));
+ else add(new Sequence.Singleton(e, null, null));
} else {
- who.add(new Sequence.RewritingSequence(null, new Element[] { e }, null, null));
+ add(new Sequence.RewritingSequence(null, new Element[] { e }, null, null));
if (this.separator==null) {
- who.add(new Sequence.Unwrap(new Element[] { e, Repeat.this }, null, null));
+ add(new Sequence.Unwrap(new Element[] { e, Repeat.this }, null, null));
} else {
- who.add(new Sequence.Unwrap(new Element[] { e, this.separator, Repeat.this }, new boolean[] { false, true, false }, null, null));
+ add(new Sequence.Unwrap(new Element[] { e, this.separator, Repeat.this }, new boolean[] { false, true, false }, null, null));
}
}
+ if (maximal) for(Sequence s : this) s.noFollow = separator==null ? e : separator;
}
}