anchor.diff:                                    then true
                                     else false) newRules)) 
           then newRules.Remove(rule) |> ignore 
  +  //  for rule in toAdd do
  +    //    let nt = snd(getElements rule.body [] [] true) 
  +      //  let c = (fst (collectNontermsAndUnitRules (newRules |> Seq.toList))) |> Seq.filter (fun x -> )
       if startIsEps then 
           let start = (Seq.find (fun x -> x.isStart = true) newRules).name
           newRules.Add(createRule start [] (PSeq([], None, None)) true [] ) |> ignore
  
positive.code:     while flag do
          let mutable k = epsNonterms.Count
          for rule in rules do
              let elementsPos = fst (getElements rule.body [] [] true) |> List.filter (fun x -> List.forall (fun y -> epsNonterms.Contains(y)) x)
              let elementsNeg = snd (getElements rule.body [] [] true) |> List.filter (fun x -> List.forall (fun y -> epsNonterms.Contains(y)) x)
              if not (elementsPos.IsEmpty) && elementsNeg.IsEmpty
              then epsNonterms.Add(createDefaultElem(PRef(rule.name, None))) |> ignore
          if epsNonterms.Count = k then flag <- false
      epsNonterms |> Seq.toList
  
negative.code: 
  let filterAndStuff (rules: Rule.t<_,_> list) = 
      let newRules = HashSet<_>(rules, new RuleComparer<_,_>())
      let toAdd = HashSet<_>(new RuleComparer<_,_>())
      for rule in rules do
          let elements = getElements rule.body [] [] true
          for el in fst elements do 
  