anchor.diff:          let copyPR = ResizeArray.copy(graphV.passingReductions)
           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])
  -                walk (remainLength - 1) e.Dest newPath startV nonTerm pos prod true
  +            for p in passingReductions do
  +                let newPath = (if e.Ast < 0 then new Epsilon(e.Ast) :> AstNode else nodes.[e.Ast])::p.path
  +                walk (p.remainLength - 1) e.Dest newPath startV p.nonTerm p.pos p.prod true
               graphV.passingReductions.Remove((v, e)) |> ignore
   
       let processVertex v = 
  
positive.code:             for prod in arr do
                  innerGraphV.AddReduction(new Reduction(gssVertex, prod, 0, None))
      
      let (*inline*) addVertex (currentGraphV:VInfo<_>) state (listToAddUnprocessedGssV : ResizeArray<_>) =
          let mutable v = null
          let mutable isNew = false
          let vOpt = currentGraphV.processedGssVertices |> ResizeArray.tryFind (fun v -> v.State = state)
  
negative.code:                 let edge = new Edge(reduction.gssVertex, -parserSource.LeftSide.[reduction.prod]-1)
                  addEdge currentGraphV isNew newVertex edge false
          else 
              let path = [nodes.[reduction.edge.Value.Ast]]
              walk (reduction.pos - 1) (reduction.edge.Value : Edge).Dest path currentGraphV nonTerm reduction.pos reduction.prod false
  
      let makeReductions (currentGraphV : VInfo<_>) =
  