X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fchr%2FCharAtom.java;fp=src%2Fedu%2Fberkeley%2Fsbp%2Fchr%2FCharAtom.java;h=c0df627c090ce29edc5ebbec67289f73d645e6e4;hp=0000000000000000000000000000000000000000;hb=189d68c64f7aaec90b7cdef0fb2c358fe4f0dd21;hpb=4867dcc8c43621ec974d1d6c32736f067efd5cd1 diff --git a/src/edu/berkeley/sbp/chr/CharAtom.java b/src/edu/berkeley/sbp/chr/CharAtom.java new file mode 100644 index 0000000..c0df627 --- /dev/null +++ b/src/edu/berkeley/sbp/chr/CharAtom.java @@ -0,0 +1,53 @@ +package edu.berkeley.sbp.chr; +import java.io.*; +import java.util.*; +import java.lang.reflect.*; +import java.lang.ref.*; +import edu.berkeley.sbp.*; +import edu.berkeley.sbp.util.*; +import edu.berkeley.sbp.misc.*; +import edu.berkeley.sbp.Input.Location; + +public class CharAtom extends Atom { + + public CharAtom(char a) { this(a,a); } + public CharAtom(char a, char b) { this(new CharTopology(a, b)); } + public CharAtom(CharTopology t) { this.t = t; } + + private CharTopology t; + public Topology top() { return t; } + + public static final char left = (char)9998; + public static final char right = (char)9999; + public static final Atom leftBrace = new CharAtom(left,left) { public String toString() { return "[{]"; } }; + public static final Atom rightBrace = new CharAtom(right,right) { public String toString() { return "[}]"; } }; + public static final Atom braces = new CharAtom(left,right) { public String toString() { return "[{}]"; } }; + + public static Atom set(Range.Set r) { return new CharAtom(new CharTopology(r)); } + + public String toString() { return t.toString(); } + + /** returns an element which exactly matches the string given */ + public static Element string(String s) { return string(s, true); } + public static Element string(String s, boolean share) { + if (share && s.length() == 0) return epsilon; + final String escapified = "\""+StringUtil.escapify(s, "\"\r\n\\")+"\""; + Element ret; + if (share && s.length() == 1) { + ret = + new CharAtom(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