anchor.diff:  open Yard.Generators.RNGLR.AST
   open System.Collections.Generic
   open Yard.Generators.RNGLR.DataStructures
  -open Yard.Generators.RNGLR.Parser
  +open Yard.Generators.RNGLR.Parser 
   open Microsoft.FSharp.Collections
   
   
   [<Struct>]
   type TokenWithInfo<'token> =
  -    val Token  : 'token
  +    val Token  : 'token    
       val NxtLvl : int
       val CurNum : int
       new (t,nl,cn) = {Token=t;NxtLvl=nl;CurNum=cn}
  
positive.code:                                 while j < edges.Count && trd edges.[j] = a do
                                      j <- j + 1
                                  i <- j
  
                  if pos = 0 then
                      let state = parserSource.Gotos.[vertex.State].[nonTerm]
                      addVertex [|state, !curLvl, None|] |> ignore
                      let ast = getEpsilon parserSource.LeftSide.[prod]
                      if not <| containsSimpleEdge vertex ast simpleEdges.[state] then
                          addSimpleEdge vertex ast simpleEdges.[state]
                  else
                      let path = Array.zeroCreate pos
                      path.[pos - 1] <- snd edgeOpt.Value
                      walk (pos - 1) (fst edgeOpt.Value) path
  
          let curInd = ref 0
          let isEnd = ref false
  
          let attachEdges () =
              let inline snd3 (_,x,_) = x
              for vertex in usedStates do
  
negative.code:     print "rankdir=RL"
      let getAstString (ast : obj) =
          match ast with
          | :? int as i when i >= 0 -> tokens.[i] |> tokenToNumber |> numToString |> sprintf "%s"    
          | :? int as i when i < 0 -> "eps " + numToString (-i-1)
          | :? AST as ast -> 
              let nonT = 
                  if ast.first.prod < leftSide.Length then ast.first.prod
                  else errInd
              numToString leftSide.[nonT]
  