package jscl.text; import jscl.math.Generic; import javax.annotation.Nonnull; import java.util.Iterator; import java.util.List; public class MultiTryParser<T> implements Parser<T> { @Nonnull private final List<Parser<? extends T>> parsers; public MultiTryParser(@Nonnull List<Parser<? extends T>> parsers) { this.parsers = parsers; } public T parse(@Nonnull Parameters p, Generic previousSumElement) throws ParseException { T result = null; for (final Iterator<Parser<? extends T>> it = parsers.iterator(); it.hasNext(); ) { try { final Parser<? extends T> parser = it.next(); result = parser.parse(p, previousSumElement); } catch (ParseException e) { p.addException(e); if (!it.hasNext()) { throw e; } } if (result != null) { break; } } return result; } }