Interpreter that consumes an AST node-by-node to interpret expressions.