anchor.diff:          let family = new Family(prod, new Nodes(nodes))
           let nonTermNodeNum = findSppfNode checkNode
           match nonTermNodeNum with
  -        | Some i -> addFamily sppfNodes.[i] family; i
  -        | None -> addNode (new AST(family, [||], pos))
  +        | Some i ->
  +            if not (nonTermChildren.[i].Contains children)
  +            then 
  +                addFamily sppfNodes.[i] family
  +                nonTermChildren.[i].Add children
  +            i
  +        | None -> 
  +            let newNodeNum = addNode (new AST(family, [||], pos))
  +            nonTermChildren.Add (newNodeNum, new ResizeArray<_>([children]))
  +            newNodeNum
                    
  -    let getPointer nodes set =
  -        //let uniqueNodes = nodes |> List.distinct
  +    let getPointer nodes set =        
           let pointerNum = set |> Seq.tryFind (fun i -> pointers.[int i] = nodes)
           match pointerNum with
           | Some i -> i
  
positive.code: 
      createEpsNodesAndPtr()
      run 0
      getResult()
  
      
negative.code:     let setN = new HashSet<int>()
      let setW = new HashSet<int<ptr>>()
      let reductions = new Dictionary<int<ptr> * int, int>()
      let nonTermChildren = new Dictionary<int, ResizeArray<int list>>()
      
      setP.Add (0<vertex>, new ResizeArray<_>())
      pointers.Add []
  
  