public function testOptimizeOptionalEmpty() { $optimizer = new slRegularExpressionOptimizer(); $regexp = new slRegularExpressionOptional(new slRegularExpressionEmpty()); $optimizer->optimize($regexp); $this->assertEquals(new slRegularExpressionEmpty(), $regexp); }
/** * Get regular expressions for learned schema * * Get an array of type -> regular expression associations for the learned * schema. * * @return array(slSchemaElement) */ public function getTypes() { if ($this->typesMerged) { return $this->elements; } $this->elements = $this->typeMerger->groupTypes($this->elements); $optimizer = new slRegularExpressionOptimizer(); // Ensure the regular expressions in all elements are up to date foreach ($this->elements as $type => $element) { $regularExpression = $this->convertRegularExpression($element->type->automaton); $regularExpression = $this->filterStartEndMarkers($regularExpression); // If the element has been empty at least once, make the whole // subpattern optional if ($element->type->empty) { $regularExpression = new slRegularExpressionOptional($regularExpression); } // Second optimizing step $optimizer->optimize($regularExpression); // Apply type mapping from type merger recursively to regular // expression. $element->type->regularExpression = $regularExpression; } $this->typesMerged = true; return $this->elements; }