anchor.diff:          if verticesToProcess.Count = 0 || ((verticesToProcess.ElementAt (verticesToProcess.Count - 1)).vNum = elem.vNum |> not)
           then
               verticesToProcess.Enqueue(elem)
  +
  +    let addNonZeroReduction gssVertex state token gssEdge (innerGraphV : VInfo<_>)=
  +        let arr = parserSource.Reduces.[state].[parserSource.TokenToNumber token]
  +        if arr <> null 
  +        then
  +            for (prod, pos) in arr do
  +                innerGraphV.AddReduction(new Reduction(gssVertex, prod, pos, Some gssEdge))
  +
  +    let addZeroReduction gssVertex state token (innerGraphV : VInfo<_>) shouldEnqueue =
  +        let arr = parserSource.ZeroReduces.[state].[parserSource.TokenToNumber token]
  +        if arr <> null
  +        then
  +            for prod in arr do
  +                innerGraphV.AddReduction(new Reduction(gssVertex, prod, 0, None))
  +            if shouldEnqueue then customEnqueue innerGraphV
       
       let (*inline*) addVertex (currentGraphV:VInfo<_>) state (listToAddUnprocessedGssV : ResizeArray<_>) =
           let mutable v = null
  
positive.code:                 v <- new Vertex(state, currentGraphV.vNum)
                  isNew <- true
                  listToAddUnprocessedGssV.Add v
          v, isNew
  
      let addNonZeroReduction gssVertex state token gssEdge (innerGraphV : VInfo<_>)=
          let arr = parserSource.Reduces.[state].[parserSource.TokenToNumber token]
          if arr <> null 
          then
              for (prod, pos) in arr do
                  innerGraphV.AddReduction(new Reduction(gssVertex, prod, pos, Some gssEdge))
  
      let addZeroReduction gssVertex state token (innerGraphV : VInfo<_>) shouldEnqueue =
          let arr = parserSource.ZeroReduces.[state].[parserSource.TokenToNumber token]
          if arr <> null
          then
              for prod in arr do
                  innerGraphV.AddReduction(new Reduction(gssVertex, prod, 0, None))
              if shouldEnqueue then customEnqueue innerGraphV
  
      let edgesToTerms = new Dictionary<_,_>()
      let push (currentGraphV:VInfo<_>) gssVertex state =
  
negative.code: 
                  let edge = new Edge(gssVertex, edgesToTerms.[e])
  
  
                  if targetGssV.FindIndex gssVertex.State gssVertex.Level = -1
                  then
                      if not isNew && targetGssV.PassingReductions.Count > 0
                      then e.Target.passingReductions.Add((targetGssV, edge))
  
                      targetGssV.addEdge edge
  
                      for e2 in outEdgesInnerGraph.[e.Target.vNum] do
                          addNonZeroReduction gssVertex push e2.Tag edge e.Target
  
          if not <| currentGraphV.processedGssVertices.Contains(gssVertex)
          then 
              currentGraphV.processedGssVertices.Add(gssVertex)
  