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.*;
import edu.berkeley.sbp.util.*;
import edu.berkeley.sbp.*;
/** an implementation of Token for streams of Java char values */
public class StringToken implements Token {
public static final StringToken left = new StringToken(null, null) { public boolean equals(Object o) { return this==o; } };
public static final StringToken right = new StringToken(null, null) { public boolean equals(Object o) { return this==o; } };
public static final Atom leftBrace = new StringAtom(new DiscreteTopology(left)) { public String toString() { return "{"; } };
public static final Atom rightBrace = new StringAtom(new DiscreteTopology(right)) { public String toString() { return "}"; } };
private static class StringAtom extends Atom {
private String s;
private Topology t;
public StringAtom(String s) { this.t = new DiscreteTopology(new StringToken(s, null)); this.s = s; }
public StringAtom(Topology t) { this.t = t; }
public String toString() { return "[atom \""+s+"\"]"; }
public Topology top() { return t; }
}
/** returns an element which exactly matches the string given */
public static Element string(String s) {
return new StringAtom(s);
}
public static Topology top() { return new DiscreteTopology(); }
public final String s;
public final Location location;
private StringToken(String s, Location loc) { this.s = s; this.location = loc; }
public String result() { return s; }
public Location getLocation() { return location; }
public String toString() { return "\'"+StringUtil.escapify(s)+"\'"; }
public boolean equals(Object o) { return o!=null && o instanceof StringToken && s.equals(((StringToken)o).s); }
public int hashCode() { return s==null ? 0 : s.hashCode(); }
}