anchor.diff:  open YC.GLL.GSS
   
   type SPPF(lengthOfInput : int, startState : int<positionInGrammar>, finalStates : HashSet<int<positionInGrammar>>) =
  +    (*
       let hashIntermed lExt rExt state =   
           lExt
           * (lengthOfInput + 1) 
  
positive.code:     
  
      member this.GetNodeT (symbol : int<token>) (pos : int<positionInInput>) (nextPos : int<positionInInput>) =
          let index = int pos + 1
          if symbol = epsilon
          then
              if this.EpsilonNodes.Item index <> Unchecked.defaultof<int<nodeMeasure>>
              then
                  TreeNode(this.EpsilonNodes.Item index)
              else
                  let t = new EpsilonNode(packExtension index index)
                  this.Nodes.Add t
                  let res = this.Nodes.Length - 1
                  this.EpsilonNodes.[index] <- ((this.Nodes.Length - 1)*1<nodeMeasure>)
                  TreeNode(res * 1<nodeMeasure>)
          else
              if this.TerminalNodes.Item index <> Unchecked.defaultof<int<nodeMeasure>>
              then
                  TreeNode(this.TerminalNodes.Item index)
              else
                  let t = new TerminalNode(symbol, packExtension index nextPos)
                  this.Nodes.Add t
                  let res = this.Nodes.Length - 1
                  let curr = this.TerminalNodes.[index]
                  this.TerminalNodes.[index] <- ((this.Nodes.Length - 1)*1<nodeMeasure>)
                  let New = this.TerminalNodes.[index]
                  TreeNode(res * 1<nodeMeasure>)
      
      member this.GetNodeP (state : int<positionInGrammar>) (t : TypeOfNode) currentN currentR = 
          let currR = this.Nodes.Item (int currentR)
  
negative.code:         | TreeNode x -> x
          | _ -> failwith "Wrong type"
  
      let nonTerminalNodes = new Dictionary<NonTerminalNode, int<nodeMeasure>>()
      //let packedNodes = new Dictionary<int, 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
  