public class Calculate implements ASTVisitor { public Object VisitIntegerLiteral(ASTIntegerLiteral literal) { return new Integer(literal.value()); } public Object VisitOperatorExpression(ASTOperatorExpression opexpr) { Integer left = (Integer) opexpr.left().accept(this); int leftval = left.intValue(); Integer right = (Integer) opexpr.right().accept(this); int rightval = right.intValue(); switch(opexpr.operator()) { case ASTOperatorExpression.PLUS: return new Integer(leftval + rightval); case ASTOperatorExpression.MINUS: return new Integer(leftval - rightval); case ASTOperatorExpression.MULTIPLY: return new Integer(leftval * rightval); case ASTOperatorExpression.DIVIDE: return new Integer(leftval / rightval); } return null; } }