Skip to content
Snippets Groups Projects
Commit c69d56e5 authored by Martin Kočička's avatar Martin Kočička Committed by Jan Trávníček
Browse files

added method for generating next state in LR(0) automaton

parent 3488ce77
No related branches found
No related tags found
1 merge request!18Bp kocicma3
...@@ -64,6 +64,27 @@ LR0Items LRParser::getClosure ( LR0Items items, grammar::CFG originalGrammar ) { ...@@ -64,6 +64,27 @@ LR0Items LRParser::getClosure ( LR0Items items, grammar::CFG originalGrammar ) {
return items; return items;
} }
   
LR0Items LRParser::getNextStateItems ( LR0Items items, alphabet::Symbol symbol, grammar::CFG originalGrammar ) {
LR0Items transitionItems;
for ( const LR0Items::value_type & symbolItems : items ) {
alphabet::Symbol leftHandSide = symbolItems.first;
for ( const std::pair < unsigned, std::vector < alphabet::Symbol > > & item : symbolItems.second) {
unsigned position = item.first;
std::vector < alphabet::Symbol > rightHandSide = item.second;
if ( position == rightHandSide.size ( ) ) {
continue;
}
if ( rightHandSide[position] == symbol ) {
transitionItems[leftHandSide].insert ( { position + 1, rightHandSide } );
}
}
}
return getClosure ( transitionItems, originalGrammar );
}
} /* namespace parsing */ } /* namespace parsing */
   
} /* namespace grammar */ } /* namespace grammar */
...@@ -23,6 +23,8 @@ public: ...@@ -23,6 +23,8 @@ public:
static grammar::CFG getAugmentedGrammar ( grammar::CFG originalGrammar ); static grammar::CFG getAugmentedGrammar ( grammar::CFG originalGrammar );
   
static LR0Items getClosure ( LR0Items items, grammar::CFG originalGrammar ); static LR0Items getClosure ( LR0Items items, grammar::CFG originalGrammar );
static LR0Items getNextStateItems ( LR0Items items, alphabet::Symbol symbol, grammar::CFG originalGrammar );
}; };
   
} /* namespace parsing */ } /* namespace parsing */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment