@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { List<Matcher> ms = new ArrayList<>(); for (Matcher m : matchers) { ms.add(m.rewriteEnd(f)); } return f.apply(OrMatcher.create(ms)); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { List<Matcher> ms = new ArrayList<>(); for (Matcher m : matchers) { ms.add(m.rewriteEnd(f)); } return f.apply(OrMatcher.create(ms)); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { List<Matcher> ms = new ArrayList<>(); for (int i = 0; i < matchers.length - 1; ++i) { ms.add(matchers[i]); } ms.add(matchers[matchers.length - 1].rewriteEnd(f)); return f.apply(SeqMatcher.create(ms)); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { return f.apply(new ZeroOrMoreMatcher(repeated, next.rewriteEnd(f))); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { return f.apply(new NegativeLookaheadMatcher(matcher.rewriteEnd(f))); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { return f.apply(new NegativeLookaheadMatcher(matcher.rewriteEnd(f))); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { return f.apply(new IndexOfMatcher(pattern, next.rewriteEnd(f))); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { return f.apply(new PositiveLookaheadMatcher(matcher.rewriteEnd(f))); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { List<Matcher> ms = new ArrayList<>(); for (int i = 0; i < matchers.length - 1; ++i) { ms.add(matchers[i]); } ms.add(matchers[matchers.length - 1].rewriteEnd(f)); return f.apply(SeqMatcher.create(ms)); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { return f.apply(new PositiveLookaheadMatcher(matcher.rewriteEnd(f))); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { return f.apply(new IndexOfMatcher(pattern, next.rewriteEnd(f))); }
@Override public Matcher rewriteEnd(Function<Matcher, Matcher> f) { return f.apply(new ZeroOrMoreMatcher(repeated, next.rewriteEnd(f))); }
private static Matcher optimizeSinglePass(Matcher matcher) { return matcher .rewrite(Optimizer::mergeNext) .rewrite(Optimizer::removeTrueInSequence) .rewrite(Optimizer::sequenceWithFalseIsFalse) .rewrite(Optimizer::sequenceWithStuffAfterEndIsFalse) .rewrite(Optimizer::zeroOrMoreFalse) .rewrite(Optimizer::convertEmptyCharClassToFalse) .rewrite(Optimizer::convertSingleCharClassToSeq) .rewrite(Optimizer::removeStartFollowedByMatchAny) .rewrite(Optimizer::removeMatchAnyFollowedByStart) .rewrite(Optimizer::removeMatchAnyFollowedByIndexOf) .rewrite(Optimizer::removeSequentialMatchAny) .rewrite(Optimizer::flattenNestedSequences) .rewrite(Optimizer::flattenNestedOr) .rewrite(Optimizer::dedupOr) .rewrite(Optimizer::removeFalseBranchesFromOr) .rewrite(Optimizer::extractPrefixFromOr) .rewrite(Optimizer::inlineMatchAnyPrecedingOr) .rewrite(Optimizer::startsWithCharSeq) .rewrite(Optimizer::combineCharSeqAfterStartsWith) .rewrite(Optimizer::combineCharSeqAfterIndexOf) .rewrite(Optimizer::combineAdjacentCharSeqs) .rewrite(Optimizer::removeRepeatedStart) .rewrite(Optimizer::combineAdjacentStart) .rewrite(Optimizer::convertRepeatedAnyCharSeqToIndexOf) .rewriteEnd(Optimizer::removeTrailingMatchAny); }
private static Matcher optimizeSinglePass(Matcher matcher) { return matcher .rewrite(Optimizer::mergeNext) .rewrite(Optimizer::removeTrueInSequence) .rewrite(Optimizer::sequenceWithFalseIsFalse) .rewrite(Optimizer::sequenceWithStuffAfterEndIsFalse) .rewrite(Optimizer::zeroOrMoreFalse) .rewrite(Optimizer::convertEmptyCharClassToFalse) .rewrite(Optimizer::convertSingleCharClassToSeq) .rewrite(Optimizer::removeStartFollowedByMatchAny) .rewrite(Optimizer::removeMatchAnyFollowedByStart) .rewrite(Optimizer::removeMatchAnyFollowedByIndexOf) .rewrite(Optimizer::removeSequentialMatchAny) .rewrite(Optimizer::flattenNestedSequences) .rewrite(Optimizer::flattenNestedOr) .rewrite(Optimizer::dedupOr) .rewrite(Optimizer::removeFalseBranchesFromOr) .rewrite(Optimizer::extractPrefixFromOr) .rewrite(Optimizer::inlineMatchAnyPrecedingOr) .rewrite(Optimizer::startsWithCharSeq) .rewrite(Optimizer::combineCharSeqAfterStartsWith) .rewrite(Optimizer::combineCharSeqAfterIndexOf) .rewrite(Optimizer::combineAdjacentCharSeqs) .rewrite(Optimizer::removeRepeatedStart) .rewrite(Optimizer::combineAdjacentStart) .rewrite(Optimizer::convertRepeatedAnyCharSeqToIndexOf) .rewriteEnd(Optimizer::removeTrailingMatchAny); }