Class Combinators
- java.lang.Object
-
- proguard.classfile.attribute.signature.parsing.Combinators
-
public final class Combinators extends java.lang.ObjectWrapper class containing parser combinators. Tools to chain together multiple parsers into more complex parsers.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceCombinators.BiCombinator<A,B,R>static interfaceCombinators.PentaCombinator<A,B,C,D,E,R>static interfaceCombinators.QuaterCombinator<A,B,C,D,R>static interfaceCombinators.TerCombinator<A,B,C,R>
-
Constructor Summary
Constructors Constructor Description Combinators()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static <A,B,R>
Parser<R>chain(Parser<A> aParser, Parser<B> bParser, Combinators.BiCombinator<A,B,R> combinator)Take two parsers and return a new one, which will pass iff both parsers succeed when running one after the other.static <A,B,C,R>
Parser<R>chain(Parser<A> aParser, Parser<B> bParser, Parser<C> cParser, Combinators.TerCombinator<A,B,C,R> combinator)Same aschain(Parser, Parser, BiCombinator), just with 3 parsers.static <A,B,C,D,R>
Parser<R>chain(Parser<A> aParser, Parser<B> bParser, Parser<C> cParser, Parser<D> dParser, Combinators.QuaterCombinator<A,B,C,D,R> combinator)Same aschain(Parser, Parser, BiCombinator), just with 4 parsers.static <A,B,C,D,E,R>
Parser<R>chain(Parser<A> aParser, Parser<B> bParser, Parser<C> cParser, Parser<D> dParser, Parser<E> eParser, Combinators.PentaCombinator<A,B,C,D,E,R> combinator)Same aschain(Parser, Parser, BiCombinator), just with 5 parsers.static <T> Parser<T>oneOf(Parser<? extends T>... parsers)Given a list of parsers of the same type, return a result of the first one that succeeds.static <T> Parser<java.util.Optional<T>>optional(Parser<T> parser)Return a parser which succeeds even in cases when it can't parse anything.static <T> Parser<java.util.List<T>>repeat(Parser<T> parser)Construct a new parser, that will try to run the given one repeatedly and return a list.
-
-
-
Method Detail
-
chain
public static <A,B,R> Parser<R> chain(Parser<A> aParser, Parser<B> bParser, Combinators.BiCombinator<A,B,R> combinator)
Take two parsers and return a new one, which will pass iff both parsers succeed when running one after the other.- Type Parameters:
A- Return type of the first parser.B- Return type of the second parser.R- The new return type.- Parameters:
aParser- The parser that should run first.bParser- The second parser.combinator- A function to combine the result of both parsers into one object.- Returns:
- A new parser which succeeds only when both input parsers succeed.
-
chain
public static <A,B,C,R> Parser<R> chain(Parser<A> aParser, Parser<B> bParser, Parser<C> cParser, Combinators.TerCombinator<A,B,C,R> combinator)
Same aschain(Parser, Parser, BiCombinator), just with 3 parsers.
-
chain
public static <A,B,C,D,R> Parser<R> chain(Parser<A> aParser, Parser<B> bParser, Parser<C> cParser, Parser<D> dParser, Combinators.QuaterCombinator<A,B,C,D,R> combinator)
Same aschain(Parser, Parser, BiCombinator), just with 4 parsers.
-
chain
public static <A,B,C,D,E,R> Parser<R> chain(Parser<A> aParser, Parser<B> bParser, Parser<C> cParser, Parser<D> dParser, Parser<E> eParser, Combinators.PentaCombinator<A,B,C,D,E,R> combinator)
Same aschain(Parser, Parser, BiCombinator), just with 5 parsers.
-
repeat
public static <T> Parser<java.util.List<T>> repeat(Parser<T> parser)
Construct a new parser, that will try to run the given one repeatedly and return a list.Note: This parser always succeeds, because if it won't match anything, it will still return an empty list.
- Type Parameters:
T- Return type of the input parser.- Parameters:
parser- The parser to repeatedly run.- Returns:
- The new parser.
-
optional
public static <T> Parser<java.util.Optional<T>> optional(Parser<T> parser)
Return a parser which succeeds even in cases when it can't parse anything.- Type Parameters:
T- The return type of the parser.- Parameters:
parser- A parser to wrap with an optional check.- Returns:
- A new parser that doesn't fail when no input is successfully parsed.
-
oneOf
@SafeVarargs public static <T> Parser<T> oneOf(Parser<? extends T>... parsers)
Given a list of parsers of the same type, return a result of the first one that succeeds. Or null if none succeed.- Type Parameters:
T- The return type of all the parsers involved.- Parameters:
parsers- The input parsers to all try.- Returns:
- A new parser that tries all the given parsers.
-
-