serializer = new Serializer($this->meta, $this->output); $this->setRunner(); } /** * Build and return a regular expression that matches all of the given strings * * @param string[] $strings Literal strings to be matched * @return string Regular expression (without delimiters) */ public function build(array $strings): string { $strings = $this->getInputSplitter()->splitStrings($strings); $strings = $this->getStringSorter()->getUniqueSortedStrings($strings); if ($this->isEmpty($strings)) { return ''; } $strings = $this->runner->run($strings); return $this->serializer->serializeStrings($strings, !$this->standalone); } protected function getInputSplitter(): InputSplitter { return new InputSplitter($this->input, $this->meta); } public function getStringSorter(): StringSorter { return new StringSorter; } /** * Test whether the list of strings is empty * * @param array $strings * @return bool */ protected function isEmpty(array $strings): bool { return (empty($strings) || $strings === [[]]); } /** * Set the Runner instance $in this->runner * * @return void */ protected function setRunner(): void { $this->runner = new Runner; $this->runner->addPass(new MergePrefix); $this->runner->addPass(new GroupSingleCharacters); $this->runner->addPass(new Recurse($this->runner)); $this->runner->addPass(new PromoteSingleStrings); $this->runner->addPass(new CoalesceOptionalStrings); $this->runner->addPass(new MergeSuffix); $this->runner->addPass(new CoalesceSingleCharacterPrefix); } }