anchor.diff:      new (edge) = new Path (edge, null, 1)
   
   let buildAstAbstract<'TokenType> (parserSource : ParserSource<'TokenType>) (tokens : ParserInputGraph<'TokenType>) =
  +    //printfn "\n__________________________________________________________"
       let statesCount = parserSource.Gotos.Length
       let startV, finalV, innerGraph =
  -        let verticesMap = tokens.Vertices |> Seq.map (fun i -> (i, new VInfo<_> (i, statesCount))) |> dict
  +        let verticesMap = Array.zeroCreate (Seq.max tokens.Vertices + 1)            
  +        for i in tokens.Vertices do
  +             verticesMap.[i] <- new VInfo<_> (i, statesCount)
           let g = new QuickGraph.AdjacencyGraph<_,_>()
           let added = 
               tokens.Edges |> Seq.map (fun e -> new QuickGraph.TaggedEdge<_,_>(verticesMap.[e.Source], verticesMap.[e.Target], e.Tag))
  
positive.code:     let verticesToProcess = new Queue<_>()
      verticesToProcess.Enqueue (startV)
      let mutable errorIndex = -1
      let verticesSeenBefore = new Dictionary<_,_>()
      for v in innerGraph.Vertices do
          verticesSeenBefore.Add(v, false)
      
      let customEnqueue (elem : VInfo<_>) = 
          verticesToProcess.Enqueue(elem)
  
      let edgesToTerms = new Dictionary<_,_>()
      let push currentGraphV gssVertex state =
          let reductions = new ResizeArray<_>(10)
          let newUnprocessedGssVs = new ResizeArray<_>(2)
          for e in innerGraph.OutEdges currentGraphV do
          //printfn "v(%d,%d)" state num
              let push = parserSource.Gotos.[state].[parserSource.TokenToNumber e.Tag]
              if push <> 0 
  
negative.code:         while errorIndex = -1 && verticesToProcess.Count > 0 do
              let curV = verticesToProcess.Dequeue()
              processVertex curV
              verticesSeenBefore.[curV.vNum] <- true
  
          if errorIndex <> -1 then
              Error (errorIndex - 1, Unchecked.defaultof<'TokenType>, "Parse error")
  