From e42e16515f4392017a8109922d37dcd0926f915a Mon Sep 17 00:00:00 2001 From: adam Date: Sun, 15 Jan 2006 04:45:51 -0500 Subject: [PATCH] checkpoint darcs-hash:20060115094551-5007d-55e8fca6c35f8f919db92c33c157e19653c3e06f.gz --- src/edu/berkeley/sbp/Atom.java | 2 +- src/edu/berkeley/sbp/misc/CharRange.java | 16 ++++++++---- src/edu/berkeley/sbp/misc/CharToStringParser.java | 4 +-- src/edu/berkeley/sbp/misc/CharToken.java | 22 ---------------- src/edu/berkeley/sbp/tib/Tib.java | 29 ++++++++++++--------- src/edu/berkeley/sbp/util/IntegerTopology.java | 7 +++-- 6 files changed, 35 insertions(+), 45 deletions(-) delete mode 100644 src/edu/berkeley/sbp/misc/CharToken.java diff --git a/src/edu/berkeley/sbp/Atom.java b/src/edu/berkeley/sbp/Atom.java index 59ecb59..03383ab 100644 --- a/src/edu/berkeley/sbp/Atom.java +++ b/src/edu/berkeley/sbp/Atom.java @@ -48,7 +48,7 @@ public abstract class Atom extends Element implements Topology { public static class Hack extends Atom { private final Atom a; static final Topology leftright = - edu.berkeley.sbp.misc.CharToken.rightBrace.union(edu.berkeley.sbp.misc.CharToken.leftBrace); + edu.berkeley.sbp.misc.CharRange.rightBrace.union(edu.berkeley.sbp.misc.CharRange.leftBrace); public Hack(Atom a) { this.a = a; } public Topology top() { return ((Topology)a.top()).minus(leftright); } public String toString() { return "~"+a; } diff --git a/src/edu/berkeley/sbp/misc/CharRange.java b/src/edu/berkeley/sbp/misc/CharRange.java index 18f89a0..475a68c 100644 --- a/src/edu/berkeley/sbp/misc/CharRange.java +++ b/src/edu/berkeley/sbp/misc/CharRange.java @@ -10,6 +10,8 @@ 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() { @@ -34,9 +36,13 @@ public class CharRange extends Atom { 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.c2i, r)); } + + public static final char left = (char)9998; + public static final char right = (char)9999; + public static final Atom leftBrace = new CharRange(left,left) { public String toString() { return "{"; } }; + 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)); /** returns an element which exactly matches the string given */ @@ -46,13 +52,13 @@ public class CharRange extends Atom { Element ret; if (s.length() == 1) { ret = - new CharRange(new IntegerTopology(CharToken.c2i, (int)s.charAt(0))) { + new CharRange(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(CharToken.c2i, (int)s.charAt(i))); + for(int i=0; i { } public CharToStringParser(Union u) { - super(u, new IntegerTopology(CharToken.c2i)); - pt.optimize(CharToken.c2i); + super(u, new CharTopology()); + pt.optimize(new CharTopology()); } public Forest shiftToken(Character ct, Location loc) { return Forest.create(loc, ct.toString(), null, false, false); diff --git a/src/edu/berkeley/sbp/misc/CharToken.java b/src/edu/berkeley/sbp/misc/CharToken.java deleted file mode 100644 index b0ac8e3..0000000 --- a/src/edu/berkeley/sbp/misc/CharToken.java +++ /dev/null @@ -1,22 +0,0 @@ -package edu.berkeley.sbp.misc; -import java.io.*; -import java.util.*; -import java.lang.reflect.*; -import java.lang.ref.*; -import edu.berkeley.sbp.*; -import edu.berkeley.sbp.Token.Location; -import edu.berkeley.sbp.util.*; - -/** an implementation of Token for streams of Java char values */ -public class CharToken { - - public static final Functor c2i = new Functor() { - public Integer invoke(Character c) { return (int)c.charValue(); } - }; - - public static final Atom leftBrace = new CharRange(new IntegerTopology(c2i, 9998)) { public String toString() { return "{"; } }; - public static final Atom rightBrace = new CharRange(new IntegerTopology(c2i, 9999)) { public String toString() { return "}"; } }; - public static final Character left = new Character((char)9998); - public static final Character right = new Character((char)9999); - -} diff --git a/src/edu/berkeley/sbp/tib/Tib.java b/src/edu/berkeley/sbp/tib/Tib.java index e4123fc..4b4a247 100644 --- a/src/edu/berkeley/sbp/tib/Tib.java +++ b/src/edu/berkeley/sbp/tib/Tib.java @@ -44,6 +44,9 @@ public class Tib implements Token.Stream { public Token.Location getLocation() { return new CartesianInput.Location(_row, _col); } private BufferedReader br; + char left = CharRange.left; + char right = CharRange.right; + boolean waiting = false; char waitingChar = ' '; boolean indenting = true; @@ -51,8 +54,8 @@ public class Tib implements Token.Stream { private ArrayList istack = new ArrayList(); public Character next(int numstates, int resets, int waits) throws IOException { Character ret = nextc(numstates, resets); - if (ret==CharToken.left) System.out.print("\033[31m{\033[0m"); - else if (ret==CharToken.right) System.out.print("\033[31m}\033[0m"); + if (ret==left) System.out.print("\033[31m{\033[0m"); + else if (ret==right) System.out.print("\033[31m}\033[0m"); else if (ret==null) return null; else System.out.print(ret); return ret; @@ -74,7 +77,7 @@ public class Tib implements Token.Stream { if (i==-1) { if (istack.size() > 1) { istack.remove(istack.size()-1); - return CharToken.right; + return right; } return null; } @@ -91,8 +94,8 @@ public class Tib implements Token.Stream { indenting = false; waitingChar = c; waiting = true; - waitingBrace = CharToken.left; - return CharToken.right; + waitingBrace = left; + return right; //return nextc(numstates); } blank = false; @@ -106,12 +109,12 @@ public class Tib implements Token.Stream { indenting = false; istack.add(indentation); //System.out.print("\033[31m+"+indentation+"+\033[0m"); - return CharToken.left; + return left; } else /*if (indentation < last)*/ { istack.remove(istack.size()-1); //System.out.print("\033[31m-"+last+"-\033[0m"); blank = true; - return CharToken.right; + return right; } } else { blank = false; @@ -122,8 +125,8 @@ public class Tib implements Token.Stream { public Character done(char c) { switch(c) { - case '{': return CharToken.left; - case '}': return CharToken.right; + case '{': return left; + case '}': return right; default: return c; } } @@ -146,11 +149,11 @@ public class Tib implements Token.Stream { return nonTerminal(s, new PreSequence[][] { new PreSequence[] { - new PreSequence(new Element[] { CharToken.leftBrace, + new PreSequence(new Element[] { CharRange.leftBrace, ws, u2, ws, - CharToken.rightBrace + CharRange.rightBrace }) } }, @@ -164,8 +167,8 @@ public class Tib implements Token.Stream { /* public class Braces extends Union { - private static final Element left = CharToken.string("{"); - private static final Element right = CharToken.string("}"); + private static final Element left = string("{"); + private static final Element right = string("}"); public static String join(Object[] e) { StringBuffer ret = new StringBuffer(); diff --git a/src/edu/berkeley/sbp/util/IntegerTopology.java b/src/edu/berkeley/sbp/util/IntegerTopology.java index ae99c08..71e9df9 100644 --- a/src/edu/berkeley/sbp/util/IntegerTopology.java +++ b/src/edu/berkeley/sbp/util/IntegerTopology.java @@ -23,8 +23,11 @@ public class IntegerTopology implements Topology { public IntegerTopology(Functor f, int a) { this(f, a, a); } public IntegerTopology(Functor f, int a, int b) { this(f, new Range(a, b)); } public IntegerTopology(Functor f, Range r) { this(f, new Range.Set(r)); } - public IntegerTopology(Functor f, Range.Set rs) { this.rs = rs; this.f = f; } - + public IntegerTopology(Functor f, Range.Set rs) { + this.rs = rs; + this.f = f==null?(this instanceof Functor ? (Functor)this : null):f; + } + public Topology empty() { return new IntegerTopology(f); } public boolean contains(V v) { return rs.contains(toInt(v)); } -- 1.7.10.4