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;
}
}