001 package sexp;
002
003 /**
004 * SString represents an s-expression string, e.g. "hello".
005 */
006 public class SString implements SExp {
007 private final String value;
008
009 private void checkRep() {
010 assert value != null;
011 }
012
013 /**
014 * Make an SString.
015 * @requires value != null
016 */
017 public SString(String value) {
018 if (value == null) throw new IllegalArgumentException("Argument cannot be null.");
019 this.value = value;
020 checkRep();
021 }
022
023 /**
024 * @return value of this expression
025 */
026 public String value() { return value; }
027
028 public <T> T accept(SExpVisitor<T> visitor) {
029 return visitor.visit(this);
030 }
031
032 @Override
033 public String toString() {
034 return "\"" + value + "\"";
035 }
036
037 @Override
038 public int hashCode() {
039 final int prime = 31;
040 int result = 1;
041 result = prime * result + ((value == null) ? 0 : value.hashCode());
042 return result;
043 }
044
045 @Override
046 public boolean equals(Object obj) {
047 if (this == obj)
048 return true;
049 if (obj == null)
050 return false;
051 if (getClass() != obj.getClass())
052 return false;
053 final SString other = (SString) obj;
054 return value.equals(other.value);
055 }
056 }