anchor.diff:          for (v, e) in copyPR do
               let passingReductions = v.PassingReductions
               for prod, remainLength, path, nonTerm, pos, startV in passingReductions do
  -                let newPath = path.AddEdge(if e.Ast < 0 then new Epsilon(e.Ast) :> AstNode else nodes.[e.Ast])
  +                let newPath = path.AddEdge(nodes.[e.Ast])
                   walk (remainLength - 1) e.Dest newPath startV nonTerm pos prod true
               graphV.passingReductions.Remove((v, e)) |> ignore
   
  
positive.code:             | None -> Error (-1, Unchecked.defaultof<'TokenType>, "There is no accepting state")
              | Some res -> 
                  let tree = new Tree<_>(terminals.ToArray(), nodes.[res], parserSource.Rules)
                  //tree.AstToDot parserSource.NumToString parserSource.TokenToNumber parserSource.TokenData parserSource.LeftSide "../../../Tests/AbstractRNGLR/DOT/sppf.dot"
                  Success <| tree
negative.code: 
      let verticesToRecalc = new ResizeArray<_> (10)
  
      let (*inline*) addChildren index (path : Path) prod =
          let ast = 
              match nodes.[index] with
              | :? Epsilon as eps -> let wrappedEps = new AST (new Family(-eps.EpsilonNonTerm-1, new Nodes([|eps|])), null)
                                     nodes.Set index wrappedEps
                                     wrappedEps
              | :? AST as ast -> ast
              | _ -> failwith ""
          
          //let ast = getFamily node
          let familyOpt = 
              ast.findFamily (function family -> family.prod = prod && path.IsEqual(family.nodes))
          match familyOpt with 
  