anchor.diff:          | TreeNode x -> x
           | _ -> failwith "Wrong type"
   
  -    let nonTerminalNodes = new Dictionary<int, int<nodeMeasure>>()
  +    let nonTerminalNodes = new Dictionary<NonTerminalNode, int<nodeMeasure>>()
       //let packedNodes = new Dictionary<int, int<nodeMeasure>>()
  -    let intermidiateNodes = new Dictionary<int, int<nodeMeasure>>()
  -    let terminalNodes = new BlockResizeArray<int<nodeMeasure>>()
  -    let epsilonNodes = new BlockResizeArray<int<nodeMeasure>>()
  +    let intermidiateNodes = new Dictionary<IntermidiateNode, int<nodeMeasure>>()
  +    let terminalNodes = new Dictionary<TerminalNode, int<nodeMeasure>>()
  +    let epsilonNodes = new Dictionary<EpsilonNode, int<nodeMeasure>>()//new BlockResizeArray<int<nodeMeasure>>()
       let nodes = new BlockResizeArray<INode>()
       member this.Nodes = nodes
       member this.TerminalNodes = terminalNodes
  
positive.code:         * (lengthOfInput + 1)
          + z * (lengthOfInput + 1)
          + w
      let dummyNode = -1<nodeMeasure>
      let dummyAST = new TerminalNode(-1<token>, packExtension -1 -1)
      let epsilon = -1<token>
  
negative.code:     member this.FindSppfNode (t : TypeOfNode) lExt rExt : int<nodeMeasure> =
          match t with 
          | Nonterm state ->
              let newNode = new NonTerminalNode(state, (packExtension lExt rExt))
              //let key = hashNonterm lExt rExt (int state)
              let contains, n = this.NonTerminalNodes.TryGetValue newNode
              if not contains
              then
                  this.Nodes.Add(newNode)
                  let num = (this.Nodes.Length - 1)*1<nodeMeasure>
                  this.NonTerminalNodes.Add(newNode, num)
                  num
              else n
          | Intermed state -> 
              let newNode = new IntermidiateNode(state, (packExtension lExt rExt))
              //let key = hashIntermed lExt rExt (int state)
              let contains, n = this.IntermidiateNodes.TryGetValue newNode
              if not contains
              then
                  this.Nodes.Add(newNode)
                  let num = (this.Nodes.Length - 1)*1<nodeMeasure>
                  this.IntermidiateNodes.Add(newNode, num)
                  num  
              else n
  
  