data = $matches[1] ?? []; $this->endPosition = count($this->data); } public function consume(): string|bool { if ($this->position === $this->endPosition) { return false; } return $this->data[$this->position++]; } public function peek(): string|bool { if ($this->position === $this->endPosition) { return false; } return $this->data[$this->position + 1]; } public function unconsume(): bool { if ($this->position < 0) { return false; } $this->position--; return true; } }