/**
  * @param int $index
  *
  * @return mixed
  */
 public function readAt($index)
 {
     if ($index > 0 && $this->lexer->getStream()->cursor() - $this->cursor < $index) {
         $i = 0;
         while (($token = $this->lexer->nextToken()) && $i < $index) {
             $this->input[] = $token;
             ++$i;
         }
     }
     return parent::readAt($index);
 }
 /**
  * @param string $input
  */
 public function __construct($input)
 {
     $strlen = mb_strlen($input);
     $array = array();
     while ($strlen) {
         $array[] = mb_substr($input, 0, 1);
         $input = mb_substr($input, 1, $strlen);
         $strlen = mb_strlen($input);
     }
     parent::__construct($array);
 }