diff --git a/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp b/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp index 3837b8ac91e454bb686d76cbade7bd40e1a0dcc8..d4c760831b8e3c7426b8c6fe51753b86e4f95aa2 100644 --- a/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp +++ b/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp @@ -93,7 +93,7 @@ grammar::EpsilonFreeCFG assignAsOrder(const grammar::EpsilonFreeCFG& origGrammar continue; } if(origGrammar.getRules().find(secondLHS) == origGrammar.getRules().end()) { //is there any right hand side to substitue with? - res.addRule(lhs, singleRHS); + //if not well this rule does not generate anything anyway continue; } @@ -109,6 +109,9 @@ grammar::EpsilonFreeCFG assignAsOrder(const grammar::EpsilonFreeCFG& origGrammar grammar::EpsilonFreeCFG LeftRecursionRemover::remove(const grammar::EpsilonFreeCFG& origGrammar) { grammar::EpsilonFreeCFG step = origGrammar; + for(const alphabet::Symbol& nonterminal : step.getNonterminalAlphabet()) { // remove identities + step.removeRule(nonterminal, std::vector<alphabet::Symbol>{nonterminal}); + } unsigned i = 0; while(i < origGrammar.getNonterminalAlphabet().size()) { grammar::EpsilonFreeCFG nextStep = assignAsOrder(directLeftRecursionRemoveAsOrder(step), i, origGrammar.getNonterminalAlphabet());