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:                     then
                          let _, edgeLabel = addEdge vertex family edges.[state] true
                          let arr = parserSource.Reduces.[state].[!curNum]
                          if arr <> null 
                          then
                              for (prod, pos) in arr do
                                  reductions.Push (vertex, prod, pos, Some (vertex, box edgeLabel))
                      family
                             
              let state = snd <| pushes.Peek()
  
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
  