package nl.uva.polyql.ast.expressions; import java.util.Set; import nl.uva.polyql.ast.AstComponent; import nl.uva.polyql.ast.LineInfo; import nl.uva.polyql.ast.Question; import nl.uva.polyql.ast.values.Type; import nl.uva.polyql.ast.values.Value; import nl.uva.polyql.validation.ValidationErrors; public abstract class Expression implements AstComponent { private LineInfo mLineInfo; public abstract Type getReturnType(); public abstract Value<?> getValue(); /** * Retrieves all questions that are referenced by this expression. E.g., '(num + 2)' refers to * the question with ID 'num'. * * @return The questions that this expression references, may never return null */ public abstract Set<Question> getReferencedQuestions(); public abstract ValidationErrors validate(); public boolean isValid() { return true; } @Override public void setLineInfo(final LineInfo lineInfo) { mLineInfo = lineInfo; } @Override public LineInfo getLineInfo() { return mLineInfo; } }