// // Continue at Section 7.2.3 // Page 100 // package cobalt.lang; class Interpreter implements Expr.Visitor { @Override public Object visitLiteralExpr(Expr.Literal expr) { return expr.value; } @Override public Object visitUnaryExpr(Expr.Unary expr) { Object right = evaluate(expr.right); switch (expr.operator.type) { case MINUS: return -(double)right; } return null; } @Override public Object visitGroupingExpr(Expr.Grouping expr) { return evaluate(expr.expression); } private Object evaluate(Expr expr) { return expr.accept(this); } }