package uva.ql.ast.expressions; import java.util.Arrays; import java.util.List; import uva.ql.ast.Node; import uva.ql.ast.CodeLines; import uva.ql.ast.type.Type; import uva.ql.ast.type.TypeBoolean; import uva.ql.ast.type.TypeString; import uva.ql.ast.value.GenericValue; import uva.ql.ast.visitor.ExpressionVisitor; public abstract class Expression extends Node { public abstract GenericValue<?> evaluate(); public abstract Object getValue(); public abstract List<Type> possibleReturnTypes(); public abstract List<Type> acceptedTypes(); public abstract CodeLines getLinesOfCode(); public abstract boolean isLiteral(); public abstract boolean isBinaryExpression(); public abstract <T> T accept(ExpressionVisitor<T> visitor); public Expression(){} public Expression(CodeLines _codeLines) { super(_codeLines); } public boolean isBoolean() { return possibleReturnTypes().equals(Arrays.asList(new TypeBoolean())); } public boolean isIdentifier(){ return this.possibleReturnTypes().equals(Arrays.asList(new TypeString())); } }