From 3468ad83256a1b996f5ddc4406a040ee72f0274a Mon Sep 17 00:00:00 2001 From: adam Date: Sun, 15 Jan 2006 04:50:16 -0500 Subject: [PATCH] checkpoint darcs-hash:20060115095016-5007d-ae2b197b6b8e10cd869dc0e6ceb1641b024b95ef.gz --- src/edu/berkeley/sbp/misc/CharRange.java | 32 +++++---------------------- src/edu/berkeley/sbp/misc/CharTopology.java | 30 ++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/edu/berkeley/sbp/misc/CharRange.java b/src/edu/berkeley/sbp/misc/CharRange.java index 475a68c..4fd319d 100644 --- a/src/edu/berkeley/sbp/misc/CharRange.java +++ b/src/edu/berkeley/sbp/misc/CharRange.java @@ -8,34 +8,13 @@ import edu.berkeley.sbp.Token.Location; import edu.berkeley.sbp.util.*; public class CharRange extends Atom { - private String esc(char c) { return StringUtil.escapify(c+"", "[]-~\\\"\'"); } - private Topology t; + public CharRange(char a) { this(a,a); } public CharRange(char a, char b) { this(new CharTopology(a, b)); } public CharRange(Topology t) { this.t = t; } - public Topology top() { return t; } - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append('['); - Range.Set ranges = ((IntegerTopology)top()).getRanges(); - if (ranges.size() == -1 || ranges.size() > Character.MAX_VALUE/2) { - sb.append('~'); - ranges = ranges.complement(); - } - ranges = ranges.intersect(all); - for(Range r : ranges) { - if (r.isMinNegInf() || r.isMaxPosInf()) throw new Error("should not happen"); - if (r.getMin()==r.getMax()) { - sb.append(esc((char)r.getMin())); - } else{ - sb.append(esc((char)r.getMin())); - sb.append('-'); - sb.append(esc((char)r.getMax())); - } - } - sb.append(']'); - return sb.toString(); - } + + private Topology t; + public Topology top() { return t; } public static final char left = (char)9998; public static final char right = (char)9999; @@ -43,7 +22,8 @@ public class CharRange extends Atom { public static final Atom rightBrace = new CharRange(right,right) { public String toString() { return "}"; } }; public static Atom set(Range.Set r) { return new CharRange(new CharTopology(r)); } - private static final Range.Set all = new Range.Set(new Range(0, Character.MAX_VALUE)); + + public String toString() { return t.toString(); } /** returns an element which exactly matches the string given */ public static Element string(String s) { diff --git a/src/edu/berkeley/sbp/misc/CharTopology.java b/src/edu/berkeley/sbp/misc/CharTopology.java index 796a4ce..81ab840 100644 --- a/src/edu/berkeley/sbp/misc/CharTopology.java +++ b/src/edu/berkeley/sbp/misc/CharTopology.java @@ -3,8 +3,36 @@ import edu.berkeley.sbp.*; import edu.berkeley.sbp.util.*; public class CharTopology extends IntegerTopology implements Functor { - public Integer invoke(Character c) { return (int)c.charValue(); } + public CharTopology() { super(null); } public CharTopology(Range.Set r) { super(null, r); } public CharTopology(char a, char b) { super(null, a, b); } + + public Integer invoke(Character c) { return (int)c.charValue(); } + + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append('['); + Range.Set ranges = getRanges(); + if (ranges.size() == -1 || ranges.size() > Character.MAX_VALUE/2) { + sb.append('~'); + ranges = ranges.complement(); + } + ranges = ranges.intersect(new Range.Set(new Range(0, Character.MAX_VALUE))); + for(Range r : ranges) { + if (r.isMinNegInf() || r.isMaxPosInf()) throw new Error("should not happen"); + if (r.getMin()==r.getMax()) { + sb.append(esc((char)r.getMin())); + } else{ + sb.append(esc((char)r.getMin())); + sb.append('-'); + sb.append(esc((char)r.getMax())); + } + } + sb.append(']'); + return sb.toString(); + } + + private String esc(char c) { return StringUtil.escapify(c+"", "[]-~\\\"\'"); } + } -- 1.7.10.4