package nl.uva.se.ql.typechecking; import nl.uva.se.ql.ast.expression.Binary; import nl.uva.se.ql.ast.expression.ExpressionVisitor; import nl.uva.se.ql.ast.expression.Unary; import nl.uva.se.ql.ast.expression.arithmetical.Addition; import nl.uva.se.ql.ast.expression.arithmetical.Divide; import nl.uva.se.ql.ast.expression.arithmetical.Modulo; import nl.uva.se.ql.ast.expression.arithmetical.Multiply; import nl.uva.se.ql.ast.expression.arithmetical.Negative; import nl.uva.se.ql.ast.expression.arithmetical.Positive; import nl.uva.se.ql.ast.expression.arithmetical.Power; import nl.uva.se.ql.ast.expression.arithmetical.Substraction; import nl.uva.se.ql.ast.expression.literal.BooleanLiteral; import nl.uva.se.ql.ast.expression.literal.DecimalLiteral; import nl.uva.se.ql.ast.expression.literal.IntegerLiteral; import nl.uva.se.ql.ast.expression.literal.StringLiteral; import nl.uva.se.ql.ast.expression.logical.And; import nl.uva.se.ql.ast.expression.logical.Equal; import nl.uva.se.ql.ast.expression.logical.GreaterOrEqual; import nl.uva.se.ql.ast.expression.logical.GreaterThen; import nl.uva.se.ql.ast.expression.logical.LessOrEqual; import nl.uva.se.ql.ast.expression.logical.LessThen; import nl.uva.se.ql.ast.expression.logical.Not; import nl.uva.se.ql.ast.expression.logical.NotEqual; import nl.uva.se.ql.ast.expression.logical.Or; import nl.uva.se.ql.ast.expression.variable.Reference; import nl.uva.se.ql.ast.form.Form; import nl.uva.se.ql.ast.form.FormVisitor; import nl.uva.se.ql.ast.statement.CalculatedQuestion; import nl.uva.se.ql.ast.statement.Condition; import nl.uva.se.ql.ast.statement.Question; import nl.uva.se.ql.ast.statement.StatementVisitor; public class AbstractResolver implements FormVisitor, StatementVisitor, ExpressionVisitor<Void> { public void visit(Form form) { form.visitChildren(this); } public void visit(Question question) { } public void visit(CalculatedQuestion calculatedQuestion) { calculatedQuestion.getExpression().accept(this); } public void visit(Condition condition) { condition.visitChildren(this); } public Void visit(Addition plus) { visitBinaryExpression(plus); return null; } public Void visit(Divide divide) { visitBinaryExpression(divide); return null; } public Void visit(Power power) { visitBinaryExpression(power); return null; } public Void visit(Multiply multiply) { visitBinaryExpression(multiply); return null; } public Void visit(Modulo modulo) { visitBinaryExpression(modulo); return null; } public Void visit(Negative negative) { visitUnaryExpression(negative); return null; } public Void visit(Positive positive) { visitUnaryExpression(positive); return null; } public Void visit(Substraction minus) { visitBinaryExpression(minus); return null; } public Void visit(Not not) { visitUnaryExpression(not); return null; } public Void visit(NotEqual notEqual) { visitBinaryExpression(notEqual); return null; } public Void visit(Or or) { visitBinaryExpression(or); return null; } public Void visit(LessThen lessThen) { visitBinaryExpression(lessThen); return null; } public Void visit(LessOrEqual lessOrEqual) { visitBinaryExpression(lessOrEqual); return null; } public Void visit(GreaterThen greaterThen) { visitBinaryExpression(greaterThen); return null; } public Void visit(GreaterOrEqual greaterOrEqual) { visitBinaryExpression(greaterOrEqual); return null; } public Void visit(Equal equal) { visitBinaryExpression(equal); return null; } public Void visit(And and) { visitBinaryExpression(and); return null; } public Void visit(BooleanLiteral booleanLiteral) { return null; } public Void visit(DecimalLiteral decimalLiteral) { return null; } public Void visit(IntegerLiteral integerLiteral) { return null; } public Void visit(StringLiteral stringLiteral) { return null; } public Void visit(Reference reference) { return null; } private void visitBinaryExpression(Binary expr) { expr.getLeft().accept(this); expr.getRight().accept(this); } private void visitUnaryExpression(Unary expr) { expr.getSingleExpression().accept(this); } }