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