anchor.diff:          else Error (0, Unchecked.defaultof<'TokenType>, "This grammar cannot accept empty string")
       else
           let startGssV,_ = addVertex startV startState startV.unprocessedGssVertices
  -        startGssV.prefixes.Add(null)
           while errorIndex = -1 && verticesToProcess.Count > 0 do
               let curV = verticesToProcess.Dequeue()
               processVertex curV
  
positive.code:                     addZeroReduction v e.Tag currentGraphV false
          v, isNew
  
      //return old prefixes with terminal on end
      let newPrefixes (oldPrefixes : ResizeArray<Path>) (terminal : Terminal) =
          oldPrefixes |> ResizeArray.map (fun prefix -> new Path(terminal, prefix))
  
  
      let addEdge (startV:VInfo<_>) isNew (newVertex:Vertex) edge isNotEps (prefixesToAdd : ResizeArray<Path>) =
          if not isNew && newVertex.PassingReductions.Count > 0
          then startV.passingReductions.Add((newVertex, edge))
          customEnqueue(startV)
          newVertex.addEdge edge
          for prefixToAdd in prefixesToAdd do
              if not (ResizeArray.exists 
                         (fun (path : Path) -> path.IsEqual prefixToAdd)
                         newVertex.prefixes)
              then newVertex.prefixes.Add(prefixToAdd)
  
          if isNotEps
          then
  
negative.code:                 levels.[u.Level] <- [!curNum]
              else
                  levels.[u.Level] <- !curNum :: levels.[u.Level]
              print <| sprintf "%d [label=\"%d_%d\"]" !curNum u.Level u.State 
              (*//print prefixes
              let mutable prString = "Prefixes: "
              let rec printPath (pr:Prefix) (prevStr : string) =
                  if pr = null then prevStr + "]"
                  else 
                      match path.Head with
                      | :? Epsilon -> printPath path.Tail (prevStr + "->Epsilon")
  