public function testConvertPaperExample() { // Example 2. Let W = {abccde, cccad, bfegg, bfehi}. $automaton = new slCountingSingleOccurenceAutomaton(); $automaton->learn(array('a', 'b', 'c', 'c', 'd', 'e')); $automaton->learn(array('c', 'c', 'c', 'a', 'd')); $automaton->learn(array('b', 'f', 'e', 'g', 'g')); $automaton->learn(array('b', 'f', 'e', 'h', 'i')); $converter = new slChareConverter(); $regexp = $converter->convertAutomaton($automaton); $this->assertEquals(new slRegularExpressionSequence(new slRegularExpressionRepeatedAtLeastOnce(new slRegularExpressionChoice(new slRegularExpressionElement('a'), new slRegularExpressionElement('b'), new slRegularExpressionElement('c'))), new slRegularExpressionChoice(new slRegularExpressionElement('d'), new slRegularExpressionElement('f')), new slRegularExpressionOptional(new slRegularExpressionElement('e')), new slRegularExpressionRepeated(new slRegularExpressionElement('g')), new slRegularExpressionOptional(new slRegularExpressionElement('h')), new slRegularExpressionOptional(new slRegularExpressionElement('i'))), $regexp); }
/** * Convert automaton to regular expression * * @param slAutomaton $automaton * @return slRegularExpression */ protected function convertRegularExpression($automaton) { // Convert automatons $converter = new slSoreConverter(); if (($expression = $converter->convertAutomaton($automaton)) !== false) { return $expression; } $converter = new slChareConverter(); return $converter->convertAutomaton($automaton); }