anchor.diff:                      then
                           r.Add(new ResultStruct((getEdge <| getLeftExtension !currentExtension), (getPosOnEdge <| getLeftExtension !currentExtension), (getEdge <| getRightExtension !currentExtension), (getPosOnEdge <| getRightExtension !currentExtension), parser.NumToString <| parser.LeftSide.[rule], !currentLength))
                           |> ignore
  -                        
  +                      
                       pop !currentGSSNode !currentIndex !currentExtension !currentLength
                       
                       
  
positive.code:                     else               
                          if cP < chainLen - 1  then         
                              let curToken = input.Edges.[cE].Tokens.[cP]
                              let key = int(( curSymbol  <<< 16) ||| (curToken - parser.NonTermCount))
                              if parser.Table.ContainsKey key
                              then
  
negative.code:                             let oEdges = outEdges.[input.Edges.[cE].End]
                              for oe in oEdges do 
                                  let curToken = input.Edges.[oe].Tokens.[shift]
                                  if curSymbol = condNonTerm then currentLength := 0uy
                                  let key = int(( curSymbol  <<< 16) ||| (curToken - parser.NonTermCount))
                                  if parser.Table.ContainsKey key
                                  then
                                      create oe shift (1<labelMeasure>  * packLabelNew rule (position + 1)) !currentGSSNode curSymbol !currentLength
  