From b48cfb116828c0dbc1cc1bb777c42021773865bf Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Mon, 26 Oct 2015 12:36:01 +0100 Subject: [PATCH] verbose: print states pushdownStore and transition --- alib2algo/src/automaton/run/Run.cpp | 71 ++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 12 deletions(-) diff --git a/alib2algo/src/automaton/run/Run.cpp b/alib2algo/src/automaton/run/Run.cpp index e9ce55a14f..5b3d003d0d 100644 --- a/alib2algo/src/automaton/run/Run.cpp +++ b/alib2algo/src/automaton/run/Run.cpp @@ -15,6 +15,7 @@ #include <automaton/PDA/VisiblyPushdownDPDA.h> #include <automaton/PDA/RealTimeHeightDeterministicDPDA.h> #include <automaton/PDA/DPDA.h> +#include <common/GlobalData.h> #include <deque> @@ -33,6 +34,9 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au if ( automaton.getFinalStates ( ).count ( state ) ) occurrences.insert ( i ); + if ( common::GlobalData::verbose ) + std::clog << state << std::endl; + for ( const alphabet::Symbol & symbol : string.getContent ( ) ) { auto transition = automaton.getTransitions ( ).find ( std::make_pair ( state, symbol ) ); @@ -46,6 +50,9 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au if ( automaton.getFinalStates ( ).count ( state ) ) occurrences.insert ( i ); + + if ( common::GlobalData::verbose ) + std::clog << state << std::endl; } return std::make_tuple ( res, state, occurrences ); @@ -65,6 +72,9 @@ std::tuple < bool, std::set < State >, std::set < unsigned > > Run::calculateSta if ( automaton.getFinalStates ( ).count ( state ) ) occurrences.insert ( i ); + if ( common::GlobalData::verbose ) + std::clog << states << std::endl; + for ( const alphabet::Symbol & symbol : string.getContent ( ) ) { std::set < State > next; @@ -83,6 +93,8 @@ std::tuple < bool, std::set < State >, std::set < unsigned > > Run::calculateSta if ( automaton.getFinalStates ( ).count ( state ) ) occurrences.insert ( i ); + if ( common::GlobalData::verbose ) + std::clog << states << std::endl; } return std::make_tuple ( res, states, occurrences ); @@ -119,6 +131,9 @@ std::pair < bool, State > Run::calculateState ( const automaton::DFTA & automato if ( automaton.getFinalStates ( ).count ( state ) ) occ.insert ( tmp ); + if ( common::GlobalData::verbose ) + std::clog << state << std::endl; + return std::make_pair ( true, state ); } @@ -133,9 +148,9 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- std::pair < bool, std::set < State > > Run::calculateStates ( const automaton::NFTA & automaton, const tree::RankedNode & node, std::set < unsigned > & occ, unsigned & i ) { - std::vector < std::set < State > > states; + std::vector < std::set < State > > resStates; - states.reserve ( node.getSymbol ( ).getRank ( ).getData ( ) ); + resStates.reserve ( node.getSymbol ( ).getRank ( ).getData ( ) ); unsigned tmp = i; i++; @@ -148,10 +163,10 @@ std::pair < bool, std::set < State > > Run::calculateStates ( const automaton::N if ( childStates.second.empty ( ) ) sign = false; - states.push_back ( childStates.second ); + resStates.push_back ( childStates.second ); } - std::set < State > res; + std::set < State > states; for ( const auto & transition : automaton.getTransitions ( ) ) { if ( transition.first.first != node.getSymbol ( ) ) continue; @@ -159,15 +174,18 @@ std::pair < bool, std::set < State > > Run::calculateStates ( const automaton::N unsigned rank = transition.first.first.getRank ( ).getData ( ); for ( unsigned i = 0; i < rank; i++ ) - if ( !states[i].count ( transition.first.second[i] ) ) break; + if ( !resStates[i].count ( transition.first.second[i] ) ) break; - if ( i == rank ) res.insert ( transition.second.begin ( ), transition.second.end ( ) ); + if ( i == rank ) states.insert ( transition.second.begin ( ), transition.second.end ( ) ); } - for ( const State & state : res ) + for ( const State & state : states ) if ( automaton.getFinalStates ( ).count ( state ) ) occ.insert ( tmp ); - return std::make_pair ( sign, res ); + if ( common::GlobalData::verbose ) + std::clog << states << std::endl; + + return std::make_pair ( sign, states ); } std::tuple < bool, std::set < State >, std::set < unsigned > > Run::calculateStates ( const automaton::NFTA & automaton, const tree::RankedTree & tree ) { @@ -207,6 +225,9 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au if ( automaton.getFinalStates ( ).count ( state ) ) occ.insert ( i ); + if ( common::GlobalData::verbose ) + std::clog << state << std::endl; + for ( const alphabet::Symbol & symbol : string.getContent ( ) ) { auto transition = automaton.getTransitions ( ).find ( std::make_pair ( state, symbol ) ); @@ -231,6 +252,9 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au if ( automaton.getFinalStates ( ).count ( state ) ) occ.insert ( i ); + + if ( common::GlobalData::verbose ) + std::clog << state << std::endl; } return std::make_tuple ( res, state, occ ); @@ -250,6 +274,9 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au if ( automaton.getFinalStates ( ).count ( state ) ) occ.insert ( i ); + if ( common::GlobalData::verbose ) + std::clog << state << std::endl; + for ( const alphabet::Symbol & symbol : string.getContent ( ) ) { if ( automaton.getCallInputAlphabet ( ).count ( symbol ) ) { auto transition = automaton.getCallTransitions ( ).find ( std::make_pair ( state, symbol ) ); @@ -290,6 +317,9 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au if ( automaton.getFinalStates ( ).count ( state ) ) occ.insert ( i ); + + if ( common::GlobalData::verbose ) + std::clog << state << std::endl; } return std::make_tuple ( res, state, occ ); @@ -309,6 +339,9 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au if ( automaton.getFinalStates ( ).count ( state ) ) occ.insert ( i ); + if ( common::GlobalData::verbose ) + std::clog << state << std::endl; + for ( auto symbolIter = string.getContent ( ).begin ( ); symbolIter != string.getContent ( ).end ( ); ) { auto callTransition = automaton.getCallTransitions ( ).find ( std::make_pair ( state, * symbolIter ) ); @@ -362,6 +395,9 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au if ( automaton.getFinalStates ( ).count ( state ) ) occ.insert ( i ); + + if ( common::GlobalData::verbose ) + std::clog << state << std::endl; } return std::make_tuple ( res, state, occ ); @@ -381,16 +417,19 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au if ( automaton.getFinalStates ( ).count ( state ) ) occ.insert ( i ); + if ( common::GlobalData::verbose ) { + std::clog << "State : " << state << std::endl; + std::clog << "PushdownStore : " << pushdownStore << std::endl; + } + for ( auto symbolIter = string.getContent ( ).begin ( ); symbolIter != string.getContent ( ).end ( ); ) { auto transitions = automaton.getTransitionsFromState ( state ); auto transition = transitions.begin ( ); - for ( auto transition = transitions.begin ( ); transition != transitions.end ( ); transition++ ) { + for ( ; transition != transitions.end ( ); transition++ ) { if ( ( std::get < 1 > ( transition->first ) != * symbolIter ) && !std::get < 1 > ( transition->first ).is < string::Epsilon > ( ) ) continue; - if ( !canPop ( pushdownStore, std::get < 2 > ( transition->first ) ) ) continue; - - break; + if ( canPop ( pushdownStore, std::get < 2 > ( transition->first ) ) ) break; } if ( transition == transitions.end ( ) ) { @@ -398,6 +437,9 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au break; } + if ( common::GlobalData::verbose ) + std::clog << "Transition: " << * transition << std::endl; + for ( unsigned j = 0; j < std::get < 2 > ( transition->first ).size ( ); j++ ) pushdownStore.pop_back ( ); for ( auto iter = transition->second.second.rbegin ( ); iter != transition->second.second.rend ( ); ++iter ) pushdownStore.push_back ( * iter ); @@ -411,6 +453,11 @@ std::tuple < bool, State, std::set < unsigned > > Run::calculateState ( const au if ( automaton.getFinalStates ( ).count ( state ) ) occ.insert ( i ); + + if ( common::GlobalData::verbose ) { + std::clog << "State: " << state << std::endl; + std::clog << "PushdownStore: " << pushdownStore << std::endl; + } } return std::make_tuple ( res, state, occ ); -- GitLab