tokenizer = $tokenizer; $this->reader = $reader; $this->eval = $eval; $this->printer = $printer; $this->env = $env; } public function readEval(string $input) { $tokens = $this->tokenizer->tokenize($input); $expr = $this->reader->read($tokens); return $this->eval->eval($expr, $this->env); } // read, eval, print public function rep(string $input, bool $printReadable): void { $result = $this->readEval($input); $this->printer->print($result, $printReadable); } }