package parseLib.parser; import parseLib.util.Input; import java.util.*; /** * A parser for optional constructs */ public class MkOptional<T> extends Parser<List<T>> { Parser<T> p; public MkOptional(Parser<T> p) { this.p = p; } public List<T> parse(Input i) { List<T> r = new LinkedList<T>(); int mark = i.getPos(); T t = p.parse(i); if (t==null) i.setPos(mark); else r.add(t); return r; } }