package nl.uva.softwcons.ql.ast.expression; import nl.uva.softwcons.ql.ast.expression.binary.BinaryExpression; import nl.uva.softwcons.ql.ast.expression.binary.arithmetic.Addition; import nl.uva.softwcons.ql.ast.expression.binary.arithmetic.Division; import nl.uva.softwcons.ql.ast.expression.binary.arithmetic.Multiplication; import nl.uva.softwcons.ql.ast.expression.binary.arithmetic.Subtraction; import nl.uva.softwcons.ql.ast.expression.binary.comparison.Equal; import nl.uva.softwcons.ql.ast.expression.binary.comparison.GreaterOrEqual; import nl.uva.softwcons.ql.ast.expression.binary.comparison.GreaterThan; import nl.uva.softwcons.ql.ast.expression.binary.comparison.LowerOrEqual; import nl.uva.softwcons.ql.ast.expression.binary.comparison.LowerThan; import nl.uva.softwcons.ql.ast.expression.binary.comparison.NotEqual; import nl.uva.softwcons.ql.ast.expression.binary.logical.And; import nl.uva.softwcons.ql.ast.expression.binary.logical.Or; import nl.uva.softwcons.ql.ast.expression.identifier.Identifier; import nl.uva.softwcons.ql.ast.expression.literal.BooleanLiteral; import nl.uva.softwcons.ql.ast.expression.literal.NumberLiteral; import nl.uva.softwcons.ql.ast.expression.literal.StringLiteral; import nl.uva.softwcons.ql.ast.expression.unary.UnaryExpression; import nl.uva.softwcons.ql.ast.expression.unary.logical.Not; public interface ExpressionVisitor<T> { /* Binary arithmetic expressions */ T visit(Addition expr); T visit(Division expr); T visit(Multiplication expr); T visit(Subtraction expr); /* Binary comparison expressions */ T visit(Equal expr); T visit(GreaterOrEqual expr); T visit(GreaterThan expr); T visit(LowerOrEqual expr); T visit(LowerThan expr); T visit(NotEqual expr); /* Binary logical expressions */ T visit(And expr); T visit(Or expr); /* Unary logical expressions */ T visit(Not expr); /* Literal and identifier expressions */ T visit(Identifier expr); T visit(BooleanLiteral expr); T visit(StringLiteral expr); T visit(NumberLiteral expr); default T visitLeftOperand(BinaryExpression expr) { return expr.getLeftExpression().accept(this); } default T visitRightOperand(BinaryExpression expr) { return expr.getRightExpression().accept(this); } default T visitUnaryOperand(UnaryExpression expr) { return expr.getExpression().accept(this); } }