public function testOptimizeOptionalEmpty()
 {
     $optimizer = new slRegularExpressionOptimizer();
     $regexp = new slRegularExpressionOptional(new slRegularExpressionEmpty());
     $optimizer->optimize($regexp);
     $this->assertEquals(new slRegularExpressionEmpty(), $regexp);
 }
Example #2
0
 /**
  * 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;
 }