anchor.diff:                  else
                       incr curInd
                       shift !curInd
  +        let lastTokens count =
  +            [| for i = max 0 (tokens.Count-count) to tokens.Count-1 do
  +                yield tokens.[i]|]
           let debugFuns () =
               let vertices = usedStates.ToArray() |> Array.map (fun i -> stateToVertex.[i])
  -            {drawGSSDot = drawDot parserSource.TokenToNumber tokens parserSource.LeftSide vertices parserSource.NumToString}
  +            {
  +                drawGSSDot = drawDot parserSource.TokenToNumber tokens parserSource.LeftSide vertices parserSource.NumToString
  +                lastTokens = lastTokens
  +            }
           if errorIndex <> -1 then
               Error (errorIndex, !curToken, "Parse error", debugFuns ())
           else
  
positive.code:         if parserSource.AcceptEmptyInput then
              Success <| new Tree<_>(null, getEpsilon startNonTerm, null)
          else
              Error (0, Unchecked.defaultof<'TokenType>, "This grammar cannot accept empty string", {drawGSSDot = fun _ -> ()})
      else
          // Currently processed token
          let curToken = ref enum.Current
  
negative.code:         new (d,a) = {Dest = d; Ast = a}
      end
  
  type ParserDebugFuns<'TokenType> = {
      drawGSSDot : string -> unit
      /// If you need more then one last token
      lastTokens : int -> 'TokenType[]
  }
  
  type ParseResult<'TokenType> =
      | Success of Tree<'TokenType>
      | Error of int * 'TokenType * string * ParserDebugFuns<'TokenType>
  
  
  /// Compare vertex like a pair: (level, state)
  