checkpoint
[sbp.git] / src / edu / berkeley / sbp / misc / CharRange.java
index 41aad06..932fbd6 100644 (file)
@@ -34,4 +34,28 @@ public class CharRange extends Atom<CharToken> {
         sb.append(']');
         return sb.toString();
     }
+    public static final Atom leftBrace  = CharToken.leftBrace;
+    public static final Atom rightBrace = CharToken.rightBrace;
+    public static Atom set(Range.Set r) { return new CharRange(new IntegerTopology<CharToken>(r)); }
+
+    /** returns an element which exactly matches the string given */
+    public static Element string(String s) {
+        if (s.length() == 0) return Union.epsilon;
+        final String escapified = "\""+StringUtil.escapify(s, "\"\r\n\\")+"\"";
+        Element ret;
+        if (s.length() == 1) {
+            ret =
+                new CharRange(new IntegerTopology<CharToken>((int)s.charAt(0))) {
+                    public String toString() { return escapified; } };
+        } else {
+            Union ret2 = new Union("\""+s+"\"_str", true) {
+                    public String toString() { return escapified; } };
+            Element[] refs = new Element[s.length()];
+            for(int i=0; i<refs.length; i++) refs[i] = new CharRange(new IntegerTopology<CharToken>((int)s.charAt(i)));
+            ret2.add(Sequence.constant(refs, s, null, null));
+            ret = ret2;
+        }
+        return ret;
+    }
+
 }