diff --git a/alib2algo/src/rte/GlushkovTraversal.cpp b/alib2algo/src/rte/GlushkovTraversal.cpp index 8108e5fbb6b5648f2cbdbaba10f66acf8a21557e..728204899200ad4c9c798af069e0e66fc3ebc582 100644 --- a/alib2algo/src/rte/GlushkovTraversal.cpp +++ b/alib2algo/src/rte/GlushkovTraversal.cpp @@ -111,15 +111,11 @@ std::set < rte::FormalRTESymbol const * > GlushkovTraversal::first ( rte::Formal tmp = first ( & node->getLeftElement ( ) ); ret.insert ( tmp.begin ( ), tmp.end ( ) ); - for ( const auto & r : ret ) - std::cerr << " In subst first: so far: " << r->getSymbol ( ) << std::endl; - auto it = std::find_if ( ret.begin ( ), ret.end ( ), [node] ( rte::FormalRTESymbol const * a ) { return a->getSymbol ( ) == node->getSubstitutionSymbol ( ); } ); if ( it != ret.end ( ) ) { - std::cerr << "SubstFirst: subst symbol found in left" << std::endl; ret.erase ( it ); tmp = first ( & node->getRightElement ( ) ); ret.insert ( tmp.begin ( ), tmp.end ( ) ); @@ -404,7 +400,7 @@ std::set < std::vector < rte::FormalRTESymbol const * > > replaceConstants ( con } std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTESymbol const * const & node, rte::FormalRTESymbol const * const & symbolptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subMap ) { - std::set < std::vector < rte::FormalRTESymbol const * > > ret; + std::set < std::vector < rte::FormalRTESymbol const * > > ret, tmp; std::vector < rte::FormalRTESymbol const * > children = node->getElements ( ); if ( symbolptr == node ) { @@ -414,10 +410,12 @@ std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::fol } for ( const auto & c : children ) - if ( pos ( c, symbolptr ) ) - return follow ( c, symbolptr, alphabetK, subMap ); + { + tmp = follow ( c, symbolptr, alphabetK, subMap ); + ret.insert(tmp.begin(), tmp.end()); + } - return std::set < std::vector < rte::FormalRTESymbol const * > > ( ); + return ret; } std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTEEmpty const * const & /* node */, rte::FormalRTESymbol const * const & /* symbolptr */, const std::set<alphabet::RankedSymbol>& /* alphabetK */, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & /* subMap */ ) { diff --git a/alib2algo/src/rte/convert/ToPostfixPushdownAutomatonGlushkov.cpp b/alib2algo/src/rte/convert/ToPostfixPushdownAutomatonGlushkov.cpp index 00c35fca1a1871a0a1618b112b16aa5d9314def1..61cf23ef3980e2d3bbd392a30ccf7e3877757171 100644 --- a/alib2algo/src/rte/convert/ToPostfixPushdownAutomatonGlushkov.cpp +++ b/alib2algo/src/rte/convert/ToPostfixPushdownAutomatonGlushkov.cpp @@ -67,20 +67,20 @@ automaton::NPDA ToPostfixPushdownAutomatonGlushkov::convert ( const rte::FormalR /* DEBUG */ std::cerr << "Pos:" << std::endl; - for ( const auto & symbol : posSet ) std::cerr << "\t" << symbol.getInputSymbol ( ) << " id=" << symbol.getId ( ) << std::endl; + for ( const auto & symbol : posSet ) std::cerr << "\t" << symbol.getInputSymbol ( ) << " id=" << symbol.getId ( ) << " ptr=" << symbol.getSymbolPtr() << std::endl; std::cerr << "First:" << std::endl; - for ( const auto & symbol : firstSet ) std::cerr << "\t" << symbol.getInputSymbol ( ) << " id=" << symbol.getId ( ) << std::endl; + for ( const auto & symbol : firstSet ) std::cerr << "\t" << symbol.getInputSymbol ( ) << " id=" << symbol.getId ( ) << " ptr=" << symbol.getSymbolPtr() << std::endl; std::cerr << "Follow:" << std::endl; for ( const auto & kv : followSet ) { - std::cerr << "\t" << kv.first.getInputSymbol ( ) << " id=" << kv.first.getId ( ) << std::endl; + std::cerr << "\t" << kv.first.getInputSymbol ( ) << " id=" << kv.first.getId ( ) << " ptr=0x" << kv.first.getSymbolPtr() << std::endl; for ( const auto & f : kv.second ) { for ( const auto & symbol : f ) - std::cerr << "\t\t" << symbol.getInputSymbol ( ) << "(id=" << symbol.getId ( ) << ") "; + std::cerr << "\t\t" << symbol.getInputSymbol ( ) << " id=" << symbol.getId ( ) << " ptr=" << symbol.getSymbolPtr() << std::endl; std::cerr << std::endl; } diff --git a/examples2/automaton/NPDA6.xml b/examples2/automaton/NPDA6.xml new file mode 100644 index 0000000000000000000000000000000000000000..a042c569847c15288da45a060cf0196fc789fee7 --- /dev/null +++ b/examples2/automaton/NPDA6.xml @@ -0,0 +1,99 @@ +<?xml version="1.0"?> +<NPDA> + <states> + <PrimitiveLabel><String>q</String></PrimitiveLabel> + <PrimitiveLabel><String>f</String></PrimitiveLabel> + </states> + <inputAlphabet> + <LabeledSymbol><PrimitiveLabel><String>a2</String></PrimitiveLabel></LabeledSymbol> + <LabeledSymbol><PrimitiveLabel><String>b0</String></PrimitiveLabel></LabeledSymbol> + <LabeledSymbol><PrimitiveLabel><String>EOF</String></PrimitiveLabel></LabeledSymbol> + </inputAlphabet> + <pushdownStoreAlphabet> + <LabeledSymbol><PrimitiveLabel><String>a2_1</String></PrimitiveLabel></LabeledSymbol> + <LabeledSymbol><PrimitiveLabel><String>b0_2</String></PrimitiveLabel></LabeledSymbol> + <LabeledSymbol><PrimitiveLabel><String>b0_3</String></PrimitiveLabel></LabeledSymbol> + <LabeledSymbol><PrimitiveLabel><String>Z0</String></PrimitiveLabel></LabeledSymbol> + </pushdownStoreAlphabet> + <initialState> + <PrimitiveLabel><String>q</String></PrimitiveLabel> + </initialState> + <initialPushdownStoreSymbol> + <LabeledSymbol><PrimitiveLabel><String>Z0</String></PrimitiveLabel></LabeledSymbol> + </initialPushdownStoreSymbol> + <finalStates> + <PrimitiveLabel><String>f</String></PrimitiveLabel> + </finalStates> + <transitions> + <transition> + <from><PrimitiveLabel><String>q</String></PrimitiveLabel></from> + <input><LabeledSymbol><PrimitiveLabel><String>a2</String></PrimitiveLabel></LabeledSymbol></input> + <pop> + <LabeledSymbol><PrimitiveLabel><String>b0_2</String></PrimitiveLabel></LabeledSymbol> + <LabeledSymbol><PrimitiveLabel><String>b0_3</String></PrimitiveLabel></LabeledSymbol> + </pop> + <to><PrimitiveLabel><String>q</String></PrimitiveLabel></to> + <push> + <LabeledSymbol><PrimitiveLabel><String>a2_1</String></PrimitiveLabel></LabeledSymbol> + </push> + </transition> + <transition> + <from><PrimitiveLabel><String>q</String></PrimitiveLabel></from> + <input><LabeledSymbol><PrimitiveLabel><String>a2</String></PrimitiveLabel></LabeledSymbol></input> + <pop> + <LabeledSymbol><PrimitiveLabel><String>a2_1</String></PrimitiveLabel></LabeledSymbol> + <LabeledSymbol><PrimitiveLabel><String>b0_3</String></PrimitiveLabel></LabeledSymbol> + </pop> + <to><PrimitiveLabel><String>q</String></PrimitiveLabel></to> + <push> + <LabeledSymbol><PrimitiveLabel><String>a2_1</String></PrimitiveLabel></LabeledSymbol> + </push> + </transition> + + + <transition> + <from><PrimitiveLabel><String>q</String></PrimitiveLabel></from> + <input><LabeledSymbol><PrimitiveLabel><String>b0</String></PrimitiveLabel></LabeledSymbol></input> + <pop> + </pop> + <to><PrimitiveLabel><String>q</String></PrimitiveLabel></to> + <push> + <LabeledSymbol><PrimitiveLabel><String>b0_2</String></PrimitiveLabel></LabeledSymbol> + </push> + </transition> + <transition> + <from><PrimitiveLabel><String>q</String></PrimitiveLabel></from> + <input><LabeledSymbol><PrimitiveLabel><String>b0</String></PrimitiveLabel></LabeledSymbol></input> + <pop> + </pop> + <to><PrimitiveLabel><String>q</String></PrimitiveLabel></to> + <push> + <LabeledSymbol><PrimitiveLabel><String>b0_3</String></PrimitiveLabel></LabeledSymbol> + </push> + </transition> + + + <transition> + <from><PrimitiveLabel><String>q</String></PrimitiveLabel></from> + <input><LabeledSymbol><PrimitiveLabel><String>EOF</String></PrimitiveLabel></LabeledSymbol></input> + <pop> + <LabeledSymbol><PrimitiveLabel><String>b0_3</String></PrimitiveLabel></LabeledSymbol> + <LabeledSymbol><PrimitiveLabel><String>Z0</String></PrimitiveLabel></LabeledSymbol> + </pop> + <to><PrimitiveLabel><String>f</String></PrimitiveLabel></to> + <push> + </push> + </transition> + <transition> + <from><PrimitiveLabel><String>q</String></PrimitiveLabel></from> + <input><LabeledSymbol><PrimitiveLabel><String>EOF</String></PrimitiveLabel></LabeledSymbol></input> + <pop> + <LabeledSymbol><PrimitiveLabel><String>b0_2</String></PrimitiveLabel></LabeledSymbol> + <LabeledSymbol><PrimitiveLabel><String>Z0</String></PrimitiveLabel></LabeledSymbol> + </pop> + <to><PrimitiveLabel><String>f</String></PrimitiveLabel></to> + <push> + </push> + </transition> + </transitions> +</NPDA>