anchor.diff:                      then
                           addSimpleEdge vertex ast simpleEdges.[state]
                           let arr = parserSource.Reduces.[state].[!curNum]
  -                        if arr <> null 
  +                        if arr <> null  && not (isEpsilonAst ast)
                           then
  +                            let edgeOpt = Some (vertex, ast)
                               for (prod, pos) in arr do
  -                                reductions.Push (vertex, prod, pos, Some (vertex, ast))
  +                                reductions.Push (vertex, prod, pos, edgeOpt)
                       new Family(prodNumber, new Nodes([|ast|]))
                   else
                       let family = new Family(prodNumber, new Nodes(unbrowsed))
  
positive.code:                         let family = new Family(prod, new Nodes(Array.copy path))
                          if not <| containsEdge final family edges.[state] then
                              let isCreated, edgeLabel = addEdge final family edges.[state] false
                              if (pos > 0 && isCreated) then
                                  let arr = parserSource.Reduces.[state].[!curNum]
                                  if arr <> null then
                                      for (prod, pos) in arr do
                                          reductions.Push (newVertex, prod, pos, Some (final, box edgeLabel))
  
                  let rec walk remainLength (vertex : Vertex) path =
                      if remainLength = 0 then handlePath path vertex
  
negative.code:                     let arr = parserSource.Reduces.[vertex.State].[!curNum]
                      if arr <> null
                      then 
                          if  not (isEpsilonAst vertex.OutEdges.first.Ast) then
                              let edgeOpt = Some (vertex.OutEdges.first.Dest, vertex.OutEdges.first.Ast)
                              for (prod, pos) in arr do
                                  reductions.Push (vertex, prod, pos, edgeOpt)
                          makeReductions !curInd recovery
                          temp.Enqueue path
                      //if shift is possible
  