checkpoint
[sbp.git] / src / edu / berkeley / sbp / misc / StringToken.java
1 package edu.berkeley.sbp.misc;
2 import java.io.*;
3 import java.util.*;
4 import java.lang.reflect.*;
5 import java.lang.ref.*;
6 import edu.berkeley.sbp.*;
7 import edu.berkeley.sbp.*;
8 import edu.berkeley.sbp.util.*;
9 import edu.berkeley.sbp.*;
10
11 /** an implementation of Token for streams of Java <tt>char</tt> values */
12 public class StringToken implements Token {
13
14     public static final StringToken left = new StringToken(null, null) { public boolean equals(Object o) { return this==o; } };
15     public static final StringToken right = new StringToken(null, null) { public boolean equals(Object o) { return this==o; } };
16
17     public static final Atom leftBrace  = new StringAtom(new DiscreteTopology<StringToken>(left)) { public String toString() { return "{"; } };
18     public static final Atom rightBrace = new StringAtom(new DiscreteTopology<StringToken>(right)) { public String toString() { return "}"; } };
19
20     private static class StringAtom extends Atom {
21         private String s;
22         private Topology t;
23         public StringAtom(String s) { this.t = new DiscreteTopology<StringToken>(new StringToken(s, null)); this.s = s; }
24         public StringAtom(Topology<StringToken> t) { this.t = t; }
25         public String toString() { return "[atom \""+s+"\"]"; }
26         public Topology top() { return t; }
27     }
28
29     /** returns an element which exactly matches the string given */
30     public static Element string(String s) {
31         return new StringAtom(s);
32     }
33
34     public static Topology<StringToken> top() { return new DiscreteTopology<StringToken>(); }
35
36     public final String s;
37     public final Location location;
38     private StringToken(String s, Location loc)    { this.s = s; this.location = loc; }
39     public String result()                         { return s; }
40     public Location getLocation()                  { return location; }
41     public String  toString()                      { return "\'"+StringUtil.escapify(s)+"\'"; }
42
43     public boolean equals(Object o) { return o!=null && o instanceof StringToken && s.equals(((StringToken)o).s); }
44     public int     hashCode()       { return s==null ? 0 : s.hashCode(); }
45 }