package org.uva.ql.ast.expression.literal; import org.uva.ql.ast.CodePosition; import org.uva.ql.ast.type.Type; import org.uva.ql.ast.value.Value; import org.uva.ql.evaluation.Evaluator; import org.uva.ql.typechecker.TypeChecker; import org.uva.ql.visitor.ExpressionVisitor; public class Identifier extends Literal { private final String identifier; public Identifier(String identifier, CodePosition pos) { super(pos); this.identifier = identifier; } @Override public <T> T accept(ExpressionVisitor<T> visitor) { return visitor.visit(this); } public Value getValue(Evaluator evaluator) { return evaluator.getValue(this); } @Override public String toString() { return identifier; } @Override public Type getType(TypeChecker typeChecker) { return typeChecker.getType(this); } @Override public <T extends Value> T getValue() { throw new UnsupportedOperationException( "Can't return value of identifier, use the getValue(evaluator) to get the value."); } public boolean equals(Identifier id) { return this.hashCode() == (id.hashCode()); } @Override public boolean equals(Object obj) { return this.hashCode() == obj.hashCode(); } @Override public int hashCode() { return identifier.hashCode(); } }