package parseLib.parser; import javaf.prelude.Function1; import parseLib.acceptor.Acceptor; import parseLib.util.*; import java.util.List; /** * The base class of all parser combinators (classes) */ public abstract class Parser<T> { /** * The essential method of a parser combinator */ public abstract T parse(Input i); // // // The following methods provide convenience of parser combination. // // public static <X> Parser<X> mkFst(Parser<X> p, Acceptor a) { return new MkFst<X>(p, a); } public static <X> Parser<X> mkSnd(Acceptor a, Parser<X> p) { return new MkSnd<X>(a, p); } public static <X,Y> Parser<Tuple2<X,Y>> mkTuple2(Parser<X> px, Parser<Y> py) { return new MkTuple2<X,Y>(px, py); } public static <X,Y,Z> Parser<Tuple3<X,Y,Z>> mkTuple3(Parser<X> px, Parser<Y> py, Parser<Z> pz) { return new MkTuple3<X,Y,Z>(px, py, pz); } public static <X,Y> Parser<Y> mkFunction(Parser<X> p, Function1<X,Y> f) { return new MkFunction<X,Y>(p, f); } public static <X> Parser<List<X>> mkStar(Parser<X> p) { return new MkStar<X>(p); } }