anchor.diff:              let v = e.Dest
               if not <| was.ContainsKey v then
                   dfs v
  -            print <| sprintf "%d -> %d [label=\"%s\"]" was.[u] was.[v] (getAstString nodes.[e.Ast])
  +            print <| sprintf "%d -> %d [label=\"%s\"]" was.[u] was.[v] (getAstString e.Ast)
   
           for v in initNodes do
               if not <| was.ContainsKey v then
  
positive.code:                 levels.[u.Level] <- [!curNum]
              else
                  levels.[u.Level] <- !curNum :: levels.[u.Level]
              print <| sprintf "%d [label=\"%d\"]" !curNum u.State
              incr curNum
              u.OutEdges |> ResizeArray.iter (handleEdge u)
              
  
negative.code:         let print s = out.WriteLine ("    " + s)
          let curNum = ref 0
          print "rankdir=RL"
          let getAstString astInd =
              if astInd > 0 
              then
                  match nodes.[astInd] with
                  | :? Terminal as i -> tokens.[i.TokenNumber] |> tokenToNumber |> numToString |> sprintf "%s"    
                  | :? AST as ast -> 
                      let nonT = 
                          if ast.first.prod < leftSide.Length then ast.first.prod
                          else errInd
                      numToString leftSide.[nonT]
                  | _ -> failwith "Unexpected ast"
              else "eps"
  
          let rec dfs (u : Vertex) =
              was.Add (u, !curNum)
  