anchor.diff:          | :? int as x when x < 0 -> Unchecked.defaultof<_>, true
           | _ -> failwith "Strange tree - singleNode with non-negative value"
   
  -    member this.Root = root
  -    member this.RulesCount = rules.GetLength(0)
  -
  -  
  -
       member this.AstToDot (indToString : int -> string) tokenToNumber (leftSide : array<int>) (path : string) =
  -        
  -        let nodeToNumber = new System.Collections.Hashtable({new Collections.IEqualityComparer with
  -                                                                    override this.Equals (x1, x2) = Object.ReferenceEquals (x1, x2)
  -                                                                    override this.GetHashCode x = x.GetHashCode()})
           use out = new System.IO.StreamWriter (path : string)
           out.WriteLine("digraph AST {")
  +
           let createNode num isAmbiguous nodeType (str : string) =
               let label =
                   let cur = str.Replace("\n", "\\n").Replace ("\r", "")
  
positive.code:             let shape =
                  match nodeType with
                  | AstNode -> ",shape=box"
                  | Prod -> ""
              let color =
                  if not isAmbiguous then ""
                  else ",style=\"filled\",fillcolor=red"
              out.WriteLine ("    " + num.ToString() + " [label=\"" + label + "\"" + color + shape + "]")
          let createEdge (b : int) (e : int) isBold (str : string) =
              let label = str.Replace("\n", "\\n").Replace ("\r", "")
              let bold = 
                  if not isBold then ""
                  else "style=bold,width=10,"
              out.WriteLine ("    " + b.ToString() + " -> " + e.ToString() + " [" + bold + "label=\"" + label + "\"" + "]")
         
          let num = ref 0
          let rec dfs (node : obj) parentNum =
              num := !num + 1
              let cur = !num 
              match node with 
              | :? AST as a -> 
                  createNode cur false AstNode (indToString leftSide.[a.first.prod])
                  createEdge parentNum cur false ""
                  dfs a.first cur
                  if a.other <> Unchecked.defaultof<_> 
                  then 
                      for t in a.other do
                          dfs t cur
              | :? Family as f ->
                  createNode cur false AstNode (indToString leftSide.[f.prod])
                  createEdge parentNum cur false ""
                  dfs f.node cur
              | :? IntermidiateNode as i ->
                  createNode cur false AstNode ((getRule i.Position).ToString() + " " + (getPosition i.Position).ToString())
                  createEdge parentNum cur false ""
                  dfs i.LeftChild cur
                  dfs i.RightChild cur
              | :? TerminalNode as t ->
                  createNode cur false AstNode ("t " + indToString (tokenToNumber tokens.[t.value]))
                  createEdge parentNum cur false ""
              | null -> ()
              
          let root = root :?> AST
          createNode !num false AstNode (indToString leftSide.[root.first.prod])
          dfs root.first !num
  
          out.WriteLine("}")
          out.Close()
  
negative.code: open System.Collections.Generic
  open Yard.Generators.Common.DataStructures
  
  [<Measure>] type key
  [<Measure>] type extension
  
  /// Arguments for tanslation calling, seen by user
  type TranslateArguments<'Token, 'Position> = {
      tokenToRange : 'Token -> 'Position * 'Position
  