From 95c979722b6b369e4dc53dde67d3ee4fd09b480b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= <peckato1@fit.cvut.cz> Date: Sun, 7 Sep 2014 21:37:13 +0200 Subject: [PATCH] algo: fa2rg: fa2rrg: Use epsilon generation sign --- .../fa2rg/fa2rrg/FAtoRRGConverter.cpp | 40 +------------------ 1 file changed, 1 insertion(+), 39 deletions(-) diff --git a/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.cpp b/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.cpp index 6fc273e1a8..4cf3d3cf79 100644 --- a/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.cpp +++ b/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.cpp @@ -45,47 +45,9 @@ grammar::RightRG FAtoRRGConverter::convert(const automaton::NFA& automaton) // step 4 if(automaton.getFinalStates().count(*automaton.getInitialStates().begin())) - { - if( ! this->isSymbolOnAnyRightHandSide(grammar.getInitialSymbol(), grammar)) // 4a - { - grammar.setGeneratesEpsilon(true); - } - else // 4b - { - alphabet::Symbol newStart = alphabet::createUniqueSymbol(grammar.getInitialSymbol(), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet()); - grammar.addNonterminalSymbol(newStart); - - for(const auto& rule : grammar.getRules()) - for(const auto& rightSide : rule.second) - if(rule.first == grammar.getInitialSymbol()) - grammar.addRule(newStart, rightSide); - - grammar.setInitialSymbol(newStart); - grammar.setGeneratesEpsilon(true); - } - } + grammar.setGeneratesEpsilon(true); // okay this feature breaks algorithm but simplifies the code actually :)) return grammar; } -bool FAtoRRGConverter::isSymbolOnAnyRightHandSide(const alphabet::Symbol& symbol, const grammar::RightRG& grammar) const -{ - for(const auto& rule : grammar.getRules()) - for(const auto& rightSide : rule.second) - if(rightSide.is<std::pair<alphabet::Symbol, alphabet::Symbol>>( )) - { - const std::pair<alphabet::Symbol, alphabet::Symbol>& rhs = rightSide.get<std::pair<alphabet::Symbol, alphabet::Symbol>>(); - if(rhs.first == symbol || rhs.second == symbol) - return true; - } - else - { - const alphabet::Symbol& rhs = rightSide.get<alphabet::Symbol>(); - if(rhs == symbol) - return true; - } - - return false; -} - } /* namespace fa2rg */ -- GitLab