@Override public RegExpTree simplify(String flags) { RegExpTree simpleBody = body.simplify(flags); if (simpleBody instanceof Empty) { if (positive) { // Always true return simpleBody; } } return new LookaheadAssertion(simpleBody, positive); }
@Override public RegExpTree simplify(String flags) { RegExpTree simpleBody = body.simplify(flags); if (simpleBody instanceof Empty) { if (positive) { // Always true return simpleBody; } } return new LookbehindAssertion(simpleBody, positive); }
@Override public RegExpTree simplify(String flags) { RegExpTree simpleBody = body.simplify(flags); if (simpleBody instanceof Empty) { if (positive) { // Always true return simpleBody; } } return new LookaheadAssertion(simpleBody, positive); }
@Override public RegExpTree simplify(String flags) { return new CapturingGroup(body.simplify(flags)); }
@Override public RegExpTree simplify(String flags) { return new NamedCaptureGroup(body.simplify(flags), name); }
@Override public RegExpTree simplify(String flags) { return new CapturingGroup(body.simplify(flags)); }
s.simplify(element.simplify(flags));
s.simplify(element.simplify(flags));
List<RegExpTree> alternatives = new ArrayList<>(); for (RegExpTree alternative : this.alternatives) { alternative = alternative.simplify(flags); if (alternative instanceof Alternation) { alternatives.addAll(((Alternation) alternative).alternatives);
List<RegExpTree> alternatives = new ArrayList<RegExpTree>(); for (RegExpTree alternative : this.alternatives) { alternative = alternative.simplify(flags); if (alternative instanceof Alternation) { alternatives.addAll(((Alternation) alternative).alternatives);
@Override public RegExpTree simplify(String flags) { RegExpTree body = this.body.simplify(flags); if (max == 0 && !body.hasCapturingGroup()) { return Empty.INSTANCE; } if (body instanceof Empty || NEVER_MATCHES.equals(body)) { return body; } int min = this.min; int max = this.max; if (body instanceof Repetition) { Repetition rbody = (Repetition) body; if (rbody.greedy == greedy) { long lmin = ((long) min) * rbody.min; long lmax = ((long) max) * rbody.max; if (lmin < Integer.MAX_VALUE) { body = rbody.body; min = (int) lmin; max = lmax >= Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) lmax; } } } if (min == 1 && max == 1) { return body; } boolean greedy = this.greedy || min == max; return body.equals(this.body) && min == this.min && max == this.max && greedy == this.greedy ? this : new Repetition(body, min, max, greedy).simplify(flags); }
@Override public RegExpTree simplify(String flags) { RegExpTree body = this.body.simplify(flags); if (max == 0 && !body.hasCapturingGroup()) { return Empty.INSTANCE; } if (body instanceof Empty || NEVER_MATCHES.equals(body)) { return body; } int min = this.min; int max = this.max; if (body instanceof Repetition) { Repetition rbody = (Repetition) body; if (rbody.greedy == greedy) { long lmin = ((long) min) * rbody.min; long lmax = ((long) max) * rbody.max; if (lmin < Integer.MAX_VALUE) { body = rbody.body; min = (int) lmin; max = lmax >= Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) lmax; } } } if (min == 1 && max == 1) { return body; } boolean greedy = this.greedy || min == max; return body.equals(this.body) && min == this.min && max == this.max && greedy == this.greedy ? this : new Repetition(body, min, max, greedy).simplify(flags); }
regexTree = regexTree.simplify(flags);