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 }