public PatternBuilder() { empty = new EmptyPattern(); notAllowed = new NotAllowedPattern(); interner = new PatternInterner(); }
Pattern makeValue(Datatype dt, Object obj) { noteDatatype(dt); Pattern p = new ValuePattern(dt, obj); return schemaInterner.intern(p); }
Pattern makeData(Datatype dt) { noteDatatype(dt); Pattern p = new DataPattern(dt); return schemaInterner.intern(p); }
void checkRestrictions(int context, DuplicateAttributeDetector dad, Alphabet alpha) throws RestrictionViolationException { if (dad != null) dad.startChoice(); p1.checkRestrictions(context, dad, alpha); if (dad != null) dad.alternative(); p2.checkRestrictions(context, dad, alpha); if (dad != null) dad.endChoice(); }
Pattern makeChoice(Pattern p1, Pattern p2) { if (p1 == empty && p2.isNullable()) return p2; if (p2 == empty && p1.isNullable()) return p1; Pattern p = new ChoicePattern(p1, p2); return interner.intern(p); }
void checkRestrictions(int context, DuplicateAttributeDetector dad, Alphabet alpha) throws RestrictionViolationException { super.checkRestrictions(context, dad, alpha); try { except.checkRestrictions(DATA_EXCEPT_CONTEXT, null, null); } catch (RestrictionViolationException e) { e.maybeSetLocator(loc); throw e; } }
Pattern makeDataExcept(Datatype dt, Pattern except, Locator loc) { noteDatatype(dt); Pattern p = new DataExceptPattern(dt, except, loc); return schemaInterner.intern(p); }
@Override Pattern expand(SchemaPatternBuilder b) { Pattern ep1 = p1.expand(b); Pattern ep2 = p2.expand(b); if (ep1 != p1 || ep2 != p2) return b.makeInterleave(ep1, ep2); else return this; } @Override
Pattern expand(SchemaPatternBuilder b) { Pattern ep = p.expand(b); if (ep != p) return b.makeAttribute(nameClass, ep, loc); else return this; }
boolean samePattern(Pattern other) { if (!super.samePattern(other)) return false; return except.samePattern(((DataExceptPattern)other).except); }
Pattern makeOneOrMore(Pattern p) { if (p == empty || p == notAllowed || p instanceof OneOrMorePattern) return p; Pattern p1 = new OneOrMorePattern(p); return interner.intern(p1); }
public PatternBuilder() { empty = new EmptyPattern(); notAllowed = new NotAllowedPattern(); interner = new PatternInterner(); }
Pattern makeValue(Datatype dt, Object obj) { noteDatatype(dt); Pattern p = new ValuePattern(dt, obj); return schemaInterner.intern(p); }
Pattern makeData(Datatype dt) { noteDatatype(dt); Pattern p = new DataPattern(dt); return schemaInterner.intern(p); }
Pattern makeChoice(Pattern p1, Pattern p2) { if (p1 == empty && p2.isNullable()) return p2; if (p2 == empty && p1.isNullable()) return p1; Pattern p = new ChoicePattern(p1, p2); return interner.intern(p); }
@Override void checkRestrictions(int context, DuplicateAttributeDetector dad, Alphabet alpha) throws RestrictionViolationException { super.checkRestrictions(context, dad, alpha); try { except.checkRestrictions(DATA_EXCEPT_CONTEXT, null, null); } catch (RestrictionViolationException e) { e.maybeSetLocator(loc); throw e; } }
Pattern makeDataExcept(Datatype dt, Pattern except, Locator loc) { noteDatatype(dt); Pattern p = new DataExceptPattern(dt, except, loc); return schemaInterner.intern(p); }
Pattern expand(SchemaPatternBuilder b) { Pattern ep1 = p1.expand(b); Pattern ep2 = p2.expand(b); if (ep1 != p1 || ep2 != p2) return b.makeInterleave(ep1, ep2); else return this; } void checkRestrictions(int context, DuplicateAttributeDetector dad, Alphabet alpha)