From 5fe9d5cecaf9bcba412618a966261ca25dafea09 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 19 Jul 2016 09:42:15 +0200 Subject: [PATCH] specialize public optimisation methods --- .../src/regexp/simplify/RegExpOptimize.h | 4 +- .../simplify/RegExpOptimizeUnboundedPart.cxx | 79 ++++++++++--------- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/alib2algo/src/regexp/simplify/RegExpOptimize.h b/alib2algo/src/regexp/simplify/RegExpOptimize.h index 3f56fc47d6..b1335d17ba 100644 --- a/alib2algo/src/regexp/simplify/RegExpOptimize.h +++ b/alib2algo/src/regexp/simplify/RegExpOptimize.h @@ -68,7 +68,9 @@ public: static regexp::RegExp optimize( const regexp::RegExp & regexp ); static regexp::UnboundedRegExp optimize( const regexp::UnboundedRegExp & regexp ); - static void optimize( regexp::UnboundedRegExpElement & regexp ); + static void optimize( regexp::UnboundedRegExpAlternation & regexp ); + static void optimize( regexp::UnboundedRegExpConcatenation & regexp ); + static void optimize( regexp::UnboundedRegExpIteration & regexp ); static regexp::FormalRegExp optimize( const regexp::FormalRegExp & regexp ); static void optimize( regexp::FormalRegExpElement & regexp ); diff --git a/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx b/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx index 7d561ed2e7..50ae9dbe0e 100644 --- a/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx +++ b/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx @@ -9,49 +9,54 @@ namespace regexp { namespace simplify { -void RegExpOptimize::optimize( UnboundedRegExpElement & element ) { - UnboundedRegExpElement* optimized = RegExpOptimize::REG_EXP_OPTIMIZE.optimizeInner( & element ); - - UnboundedRegExpAlternation * alternation = dynamic_cast<UnboundedRegExpAlternation *>( & element ); - if( alternation ) { - UnboundedRegExpAlternation * alternationOptimized = dynamic_cast<UnboundedRegExpAlternation *>( optimized ); - if( alternationOptimized ) { - * alternation = std::move( * alternationOptimized ); - delete alternationOptimized; - } else { - * alternation = UnboundedRegExpAlternation { }; - alternation->appendElement( std::manage_move ( optimized ) ); - } - return; +void RegExpOptimize::optimize( UnboundedRegExpAlternation & alt ) { + //while( A1( alt ) || A2( alt ) || A3( alt ) || A4( alt ) || A10( alt ) || V2( alt ) || V5( alt ) || V6( alt ) || X1( alt ) ); + UnboundedRegExpElement* optimized = RegExpOptimize::REG_EXP_OPTIMIZE.optimizeInner( & alt ); + + UnboundedRegExpAlternation * alternationOptimized = dynamic_cast<UnboundedRegExpAlternation *>( optimized ); + if( alternationOptimized ) { + alt = std::move( * alternationOptimized ); + delete alternationOptimized; + } else { + alt = UnboundedRegExpAlternation { }; + alt.appendElement( std::manage_move ( optimized ) ); } +} - UnboundedRegExpConcatenation * concatenation = dynamic_cast<UnboundedRegExpConcatenation *>( & element ); - if( concatenation ) { - UnboundedRegExpConcatenation * concatenationOptimized = dynamic_cast<UnboundedRegExpConcatenation *>( optimized ); - if( concatenationOptimized ) { - * concatenation = std::move( * concatenationOptimized ); - delete concatenationOptimized; - } else { - * concatenation = UnboundedRegExpConcatenation { }; - concatenation->appendElement( std::manage_move ( optimized ) ); - } - return; +void RegExpOptimize::optimize( UnboundedRegExpConcatenation & concat ) { + //while( A5( concat ) || A6( concat ) || A7( concat ) || A8( concat ) || A9( concat ) || V8( concat ) );//|| V9( concat ) ); + UnboundedRegExpElement* optimized = RegExpOptimize::REG_EXP_OPTIMIZE.optimizeInner( & concat ); + + UnboundedRegExpConcatenation * concatenationOptimized = dynamic_cast<UnboundedRegExpConcatenation *>( optimized ); + if( concatenationOptimized ) { + concat = std::move( * concatenationOptimized ); + delete concatenationOptimized; + } else { + concat = UnboundedRegExpConcatenation { }; + concat.appendElement( std::manage_move ( optimized ) ); } +} - UnboundedRegExpIteration * iteration = dynamic_cast<UnboundedRegExpIteration *>( & element ); - if( iteration ) { - UnboundedRegExpIteration * iterationOptimized = dynamic_cast<UnboundedRegExpIteration *>( optimized ); - if( iterationOptimized ) { - * iteration = std::move( * iterationOptimized ); - delete iterationOptimized; - } else { - * iteration = UnboundedRegExpIteration { std::manage_move ( optimized ) }; +void RegExpOptimize::optimize( UnboundedRegExpIteration & iter ) { + /*do { + // V1 is implemented right here + if( dynamic_cast<UnboundedRegExpEmpty*>( iter.getChild ( ).get() ) ) { + return; } - return; + // T1 is implemented right here \e* = \e + if( dynamic_cast<UnboundedRegExpEpsilon*>( iter.getChild ( ).get() ) ) { + return; + } + } while( A11( iter ) || V1( iter ) || V3( iter ) || V4( iter ) || V10( iter ) );*/ + UnboundedRegExpElement* optimized = RegExpOptimize::REG_EXP_OPTIMIZE.optimizeInner( & iter ); + + UnboundedRegExpIteration * iterationOptimized = dynamic_cast<UnboundedRegExpIteration *>( optimized ); + if( iterationOptimized ) { + iter = std::move( * iterationOptimized ); + delete iterationOptimized; + } else { + iter = UnboundedRegExpIteration { std::manage_move ( optimized ) }; } - - // Nothing to optimize original element was UnboundedRegExpSymbol, UnboundedRegExpEpsilon, or UnboundedRegExpEmpty - return; } UnboundedRegExpElement* RegExpOptimize::optimizeInner( UnboundedRegExpElement const * const & node ) const { -- GitLab